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

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

셔플

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

요약
순열 b와 정수 l이 주어질 때, l번 반복한 결과가 b가 되는 순열 a의 개수를 10^9+7로 나눈 나머지로 구한다.
난이도

보통10점 중 7점

유형
조합론, 수학, 정수론, 시뮬레이션
정답자
아직 제출이 없습니다

문제

바이트아사르(Byteasar)는 nn장의 카드로 이루어진 덱을 가지고 있다. 카드가 놓이는 자리에는 11번부터 nn번까지 번호가 매겨져 있다. 그는 한 가지 셔플 동작을 완벽하게 익혀서, 셔플할 때마다 덱이 항상 똑같은 방식으로 재배열된다. 즉 kk번 자리에 있던 카드는 언제나 aka_k번 자리로 옮겨진다. 모든 카드가 서로 다른 자리로 가므로, 수열 a1,a2,…,ana_1, a_2, \dots, a_n은 1,2,…,n1, 2, \dots, n의 순열이다.

바이트아사르가 이 셔플을 연달아 ll번 반복한다. 처음에 kk번 자리에 있던 카드가 최종적으로 놓이는 자리를 bkb_k라고 하자. 정확히는 ak(1)=aka^{(1)}_k = a_k, 그리고 t≥2t \ge 2에 대해 ak(t)=aak(t−1)a^{(t)}_k = a_{a^{(t-1)}_k}로 정의하면 bk=ak(l)b_k = a^{(l)}_k이다.

nn, ll과 수열 b1,b2,…,bnb_1, b_2, \dots, b_n 전체가 주어진다. 이 관찰과 맞아떨어지는 셔플, 즉 모든 kk에 대해 ak(l)=bka^{(l)}_k = b_k를 만족하는 순열 aa가 몇 개인지 세어라. 그 개수가 매우 클 수 있으므로 109+710^9 + 7로 나눈 나머지를 출력한다. bb를 만들어 내는 셔플이 하나도 없으면 답은 00이다.

입력

첫째 줄에 두 정수 nn과 ll이 주어진다 (1≤n,l≤1061 \le n, l \le 10^6). 이어지는 nn개의 줄 중 kk번째 줄에는 정수 bkb_k (1≤bk≤n1 \le b_k \le n)가 하나씩 주어지며, 이는 셔플을 ll번 반복한 뒤 처음 kk번 자리에 있던 카드가 놓이는 자리이다. b1,…,bnb_1, \dots, b_n은 1,…,n1, \dots, n의 순열임이 보장된다.

출력

셔플 aa(즉 1,…,n1, \dots, n의 순열) 중에서 aa를 정확히 ll번 반복했을 때 주어진 수열 bb가 되는 것의 개수를 109+710^9 + 7로 나눈 나머지를 한 줄에 출력한다. 그런 셔플이 없으면 00을 출력한다.

예제4

  1. 예제 1

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

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

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

    입력
    2 2
    2
    1
    
    예상 출력
    0