아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

멱등 함수

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

요약
집합 {1..n} 위의 함수 f가 주어질 때, g는 순열이고 h는 멱등 함수이며 f = h∘g를 만족하는 순서쌍 (g, h)의 개수를 10^9+7로 나눈 나머지로 구한다.
난이도

어려움10점 중 8점

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

문제

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

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

  • g:A→Ag : A \to A는 순열이다.
  • h:A→Ah : A \to A는 멱등 함수이다.
  • 모든 i∈Ai \in A에 대해 f(i)=h(g(i))f(i) = h(g(i))이다.

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

입력

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

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

출력

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

예제1

  1. 예제 1

    입력
    8
    7 4 5 1 7 4 4 1
    
    예상 출력
    288