HCPC 팀 짜기

면접 대비

시간 제한1초메모리 제한1024 MB

요약
각 사람이 원하는 사람이 없거나, 원하는 사람이 같은 팀에 포함되는 조건을 만족하는 3인 팀의 경우의 수를 10^9+7로 나눈 나머지를 구한다.
난이도

보통10점 중 6점

유형
조합론, 그래프, 수학, 구현
정답자
아직 제출이 없습니다

문제

동민이는 HCPC에 나갈지 말지 고민하는 사람 NN명 중 33명을 뽑아 팀을 만들어주려 한다.

각 사람들은 11부터 NN까지 번호가 차례대로 매겨져 있다. 이 중에는 원하는 사람 한 명과 같은 팀이어야 참가하는 사람도 있고, 원하는 사람이 없어 누구와 같은 팀이든 상관없이 참가할 수 있는 사람도 있다.

동민이는 각 사람이 원하는 사람이 있는지, 있다면 누구인지 모두 조사해 두었다. 하지만 어떤 조합으로 33인 팀을 만들 수 있는지는 아직 구하지 못했다. 동민이를 위해 33인 팀을 만들 수 있는 경우의 수를 계산하는 프로그램을 작성해 주자. 단, 답이 너무 커질 수 있으니 경우의 수를 109+710^9+7로 나눈 나머지를 출력한다.

입력

첫째 줄에 사람의 수를 의미하는 정수 NN이 주어진다. (1≤N≤500,000)(1\leq N\leq 500\\, 000)

둘째 줄에 NN개의 정수 A_1A\_1, A_2A\_2, ⋯\cdots, A_NA\_N이 공백으로 구분되어 주어진다. A_i=iA\_i=i라면 ii번 사람은 원하는 사람이 없다는 의미이며, 아니라면 A_iA\_i는 ii번 사람이 원하는 사람의 번호를 의미한다. (1≤A_i≤N)(1\le A\_i\le N)

출력

NN명의 사람 중 33명을 뽑아 하나의 팀을 구성하는 경우의 수를 109+710^9+7로 나눈 나머지를 출력한다.

예제1

  1. 예제 1

    입력
    5
    2 1 1 4 5
    
    예상 출력
    3