셔플
시간 제한3초메모리 제한128 MB
순열 b와 정수 l이 주어질 때, l번 반복한 결과가 b가 되는 순열 a의 개수를 10^9+7로 나눈 나머지로 구한다.
문제
바이트아사르(Byteasar)는 장의 카드로 이루어진 덱을 가지고 있다. 카드가 놓이는 자리에는 번부터 번까지 번호가 매겨져 있다. 그는 한 가지 셔플 동작을 완벽하게 익혀서, 셔플할 때마다 덱이 항상 똑같은 방식으로 재배열된다. 즉 번 자리에 있던 카드는 언제나 번 자리로 옮겨진다. 모든 카드가 서로 다른 자리로 가므로, 수열 은 의 순열이다.
바이트아사르가 이 셔플을 연달아 번 반복한다. 처음에 번 자리에 있던 카드가 최종적으로 놓이는 자리를 라고 하자. 정확히는 , 그리고 에 대해 로 정의하면 이다.
, 과 수열 전체가 주어진다. 이 관찰과 맞아떨어지는 셔플, 즉 모든 에 대해 를 만족하는 순열 가 몇 개인지 세어라. 그 개수가 매우 클 수 있으므로 로 나눈 나머지를 출력한다. 를 만들어 내는 셔플이 하나도 없으면 답은 이다.
입력
첫째 줄에 두 정수 과 이 주어진다 (). 이어지는 개의 줄 중 번째 줄에는 정수 ()가 하나씩 주어지며, 이는 셔플을 번 반복한 뒤 처음 번 자리에 있던 카드가 놓이는 자리이다. 은 의 순열임이 보장된다.
출력
셔플 (즉 의 순열) 중에서 를 정확히 번 반복했을 때 주어진 수열 가 되는 것의 개수를 로 나눈 나머지를 한 줄에 출력한다. 그런 셔플이 없으면 을 출력한다.