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

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

갈루아

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

요약
순열 p가 주어질 때, 모든 i에 대해 p(q(i)) = q(p(i))를 만족하고 역순 쌍의 개수가 짝수인 순열 q의 개수를 10^9+7로 나눈 나머지로 구한다.
난이도

어려움10점 중 8점

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

문제

에바리스트가 에콜 폴리테크니크 입학시험에 세 번째로 도전한다. 그는 모든 문제를 아주 빠르게 풀었지만, 시험관은 그가 설명을 충분히 하지 않았다며 트집을 잡는다. 시험관은 에바리스트를 떨어뜨리려고 다음과 같은 문제를 낸다. 크기 NN인 순열 pp가 주어질 때, 모든 ii에 대해 pqi=qpip_{q_i} = q_{p_i} (1≤i≤N1 \le i \le N)를 만족하는 크기 NN인 짝순열 qq의 개수를 세어라. 이 수는 매우 클 수 있으므로 시험관은 109+710^9 + 7로 나눈 나머지를 알고 싶어 한다.

순열이 짝이라는 것은 역전의 개수가 짝수라는 뜻이다. 순열 pp의 역전은 i<ji < j이고 pi>pjp_i > p_j인 첨자 쌍 (i,j)(i, j)이다.

정답을 전혀 모르는 시험관에게 안타깝게도, 갈루아는 단 1초 만에 이 문제를 풀어냈다. 당신이 시험관을 도와 답을 알려주어야 한다. 그렇지 않으면 어린 에바리스트는 또다시 거절당할 것이다.

입력

입력의 첫째 줄에는 순열의 길이를 나타내는 정수 NN이 주어진다 (1≤N≤500 0001 \le N \le 500\,000).

둘째 줄에는 순열 pp가 주어지며, NN개의 정수 pip_i가 포함된다 (1≤pi≤N1 \leq p_i \leq N, i≠ji \ne j인 모든 i,ji, j에 대해 pi≠pjp_i \ne p_j).

출력

조건 pqi=qpip_{q_i} = q_{p_i}를 만족하는 짝순열 qq의 개수를 109+710^9 + 7로 나눈 나머지를 출력한다.

힌트

첫 번째 예에서 조건을 만족하는 순열은 (1, 2, 3), (2, 3, 1), (3, 1, 2) 세 개이다. 모두 짝순열이다.

두 번째 예에서 조건을 만족하는 순열은 (1, 2, 3), (2, 1, 3) 두 개이다. 그러나 이 중 짝순열은 첫 번째뿐이다.

예제2

  1. 예제 1

    입력
    3
    3 1 2
    
    예상 출력
    3
    
  2. 예제 2

    입력
    3
    2 1 3
    
    예상 출력
    1