만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

정렬된 프랙탈 수열

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

요약
길이 N의 비내림차순 수열 중 모든 i에 대해 a[a[i]]가 a[i]와 같고 고정된 K개 위치의 값을 만족하는 수열의 개수를 M으로 나눈 나머지로 구합니다.
난이도

어려움10점 중 9점

유형
동적 계획법, 조합론, 수학
정답자
아직 제출이 없습니다

문제

NN개의 양의 정수로 이루어진 수열 AA가 있다. AA의 각 원소는 NN을 넘지 않으며, AA는 비내림차순으로 정렬되어 있다. 같은 값을 가진 원소가 둘 이상 있을 수 있다.

AA로 결정되는 길이 NN의 수열 BB를 다음과 같이 정의한다.

bi=aaib_i = a_{a_i}

여기서 1≤i≤N1 \le i \le N인 모든 ii에 대해 aia_i는 AA의 ii번째 원소이고, bib_i는 BB의 ii번째 원소이다.

A=BA = B를 만족하는 수열 AA를 정렬된 프랙탈 수열이라고 한다.

문제를 어렵게 만들기 위해 제약을 하나 추가한다. AA에서 KK개의 원소를 골라 각각 지정한 값으로 고정한다. 고정된 값은 이후에 바꿀 수 없다.

NN과 제약 조건이 주어졌을 때, 길이가 NN인 서로 다른 정렬된 프랙탈 수열의 개수를 MM으로 나눈 나머지를 구하시오.

입력

첫 번째 줄에 세 정수 NN (1≤N≤10181 \le N \le 10^{18}), MM (1≤M≤1091 \le M \le 10^9), KK (0≤K≤min⁡(N,1 000)0 \le K \le \min(N, 1\,000))가 공백으로 구분되어 주어진다.

이어지는 KK개의 줄에는 위치 ii (1≤i≤N1 \le i \le N)와 값 viv_i (1≤vi≤N1 \le v_i \le N)가 공백으로 구분되어 주어진다. 이는 aia_i를 viv_i로 고정한다는 뜻이다. 같은 위치가 두 번 이상 나오지 않는다.

출력

길이가 NN인 서로 다른 정렬된 프랙탈 수열의 개수를 MM으로 나눈 나머지를 출력한다.

힌트

두 수열 XX와 YY가 같을 필요충분조건은 다음과 같다.

  • XX와 YY의 길이가 같다.
  • 그 길이를 NN이라 할 때, 1≤i≤N1 \le i \le N인 모든 ii에 대해 XX의 ii번째 원소 xix_i와 YY의 ii번째 원소 yiy_i가 같다.

XX와 YY가 같으면 X=YX = Y로 표기한다.

예제2

  1. 예제 1

    입력
    5 100 1
    3 2
    
    예상 출력
    10
    
  2. 예제 2

    입력
    5 1 2
    1 3
    3 2
    
    예상 출력
    0