만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

강호의 초대

시간 제한2초메모리 제한512 MB

요약
각 친구가 싫어하는 한 명이 주어질 때, 무작위 초대 순서에서 초대를 수락하는 친구 수의 기댓값을 구한다.
난이도

보통10점 중 6점

유형
확률, 수학, 조합론
정답자
아직 제출이 없습니다

문제

강호가 친구 NN명을 파티에 초대하려고 한다. 친구에게는 00번부터 N−1N-1번까지 번호가 붙어 있다.

친구는 저마다 싫어하는 친구가 많아야 한 명이다. ii번 친구가 싫어하는 친구의 번호는 AiA_i이고, AiA_i가 ii와 같으면 ii번 친구는 싫어하는 친구가 없다.

강호는 친구를 한 번에 한 명씩 초대한다. ii번 친구는 AiA_i번 친구가 아직 초대를 받지 않았거나, 이미 초대를 받고 거절한 경우에만 초대를 승낙한다. 즉 AiA_i번 친구가 ii번 친구보다 먼저 초대를 받고 승낙했다면, ii번 친구는 초대를 거절한다.

초대하는 순서에 따라 승낙하는 친구의 수가 달라진다. 그래서 강호는 N!N!가지 순서 중 하나를 균등한 확률로 골라 그 순서대로 초대하기로 했다.

강호의 초대를 승낙하는 친구 수의 기댓값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 친구의 수 NN (1≤N≤501 \le N \le 50)이 주어진다.

둘째 줄에 A0,A1,…,AN−1A_0, A_1, \dots, A_{N-1}이 공백으로 구분되어 주어진다. (0≤Ai≤N−10 \le A_i \le N-1)

출력

초대를 승낙하는 친구 수의 기댓값을 소수점 아래 열째 자리까지 반올림해 한 줄에 출력한다. 뒤따르는 00도 생략하지 말고 소수점 아래를 정확히 1010자리로 채워서 출력한다. 채점 데이터에는 정답이 반올림 경계에 놓이는 경우가 없다.

설명

N=3N = 3이고 A0=0A_0 = 0, A1=1A_1 = 1, A2=1A_2 = 1인 경우를 보자. 00번과 11번은 싫어하는 친구가 없고, 22번은 11번을 싫어한다. 초대 순서는 여섯 가지다. (1,0,2)(1, 0, 2) 순서로 초대하면 11번과 00번은 승낙하지만 22번은 거절한다. (2,1,0)(2, 1, 0) 순서로 초대하면 세 명 모두 승낙한다. 여섯 가지 순서를 모두 따져 보면 승낙하는 친구 수의 기댓값은 2.52.5다.

예제4

  1. 예제 1

    입력
    2
    0 1
    
    예상 출력
    2.0000000000
    
  2. 예제 2

    입력
    2
    0 0
    
    예상 출력
    1.5000000000
    
  3. 예제 3

    입력
    3
    0 1 1
    
    예상 출력
    2.5000000000
    
  4. 예제 4

    입력
    4
    0 1 1 2
    
    예상 출력
    3.1666666667