멱등 함수

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

양의 정수 nn이 주어진다. 집합 A={1,2,3,,n}A = \{1, 2, 3, \ldots, n\}이라고 하자. 함수 f:AAf : A \to A가 서로 다른 입력을 항상 서로 다른 값으로 보내면(즉 단사이면) 이 함수를 순열이라고 부른다. 함수 f:AAf : A \to A가 모든 iAi \in A에 대해 f(f(i))=f(i)f(f(i)) = f(i)를 만족하면 이 함수를 멱등 함수라고 부른다.

함수 f:AAf : A \to A가 주어진다. 다음 조건을 모두 만족하는 함수 쌍 (g,h)(g, h)의 개수를 구하여라.

  • g:AAg : A \to A는 순열이다.
  • h:AAh : A \to A는 멱등 함수이다.
  • 모든 iAi \in A에 대해 f(i)=h(g(i))f(i) = h(g(i))이다.

개수가 매우 커질 수 있으므로 109+710^9 + 7로 나눈 나머지를 출력한다.

입력

첫째 줄에 정수 nn (1n2000001 \le n \le 200\,000)이 주어진다.

둘째 줄에 함수 ff의 정의가 주어진다. f(1),f(2),,f(n)f(1), f(2), \ldots, f(n) (1f(i)n1 \le f(i) \le n)이 공백 하나로 구분되어 주어진다.

출력

조건을 만족하는 서로 다른 함수 쌍 (g,h)(g, h)의 개수를 109+710^9 + 7로 나눈 나머지를 첫째 줄에 출력한다.