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

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

국소 최댓값

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

요약
1부터 n*m까지를 n×m 격자에 한 번씩 배치할 때, 각 칸이 자기 행과 열의 다른 어떤 칸보다 작지 않으면 극대점이라 하자. 극대점이 정확히 하나인 배치의 수를 소수 P로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

유형
조합론, 수학, 그리디
정답자
아직 제출이 없습니다

문제

n×mn \times m 정수 행렬 AA에서 AA의 국소 최댓값은 Ai,jA_{i, j}가 ii번째 행과 jj번째 열에 있는 어떤 정수보다도 작지 않은 위치 (i,j)(i, j)이다 (1≤i≤n1 \le i \le n, 1≤j≤m1 \le j \le m).

예를 들어 3×33 \times 3 행렬 [254216222],\begin{bmatrix} 2 & 5 & 4 \\ 2 & 1 & 6 \\ 2 & 2 & 2 \end{bmatrix}\text{,} 에는 국소 최댓값이 세 개 있다. 각각 값 55, 66, 22를 가지는 위치 (1,2)(1, 2), (2,3)(2, 3), (3,1)(3, 1)이다.

n×mn \times m 정수 행렬 AA가 좋은 행렬이라는 것은 다음 두 조건을 모두 만족한다는 뜻이다.

  • AA에는 국소 최댓값이 정확히 하나 있다.
  • 11부터 n×mn \times m까지의 각 정수가 AA에 정확히 한 번씩 나타난다.

nn, mm과 소수 PP가 주어질 때, 크기 n×mn \times m인 좋은 행렬의 개수를 PP로 나눈 나머지를 구하시오.

입력

첫 번째 줄에 세 정수 nn, mm, PP가 주어진다. 1≤n,m≤30001 \le n, m \le 3000이고 108≤P≤109+710^8 \le P \le 10^9 + 7이다. PP는 소수임이 보장된다.

출력

좋은 행렬의 개수를 PP로 나눈 나머지를 한 줄에 출력한다.

예제3

  1. 예제 1

    입력
    2 2 1000000007
    
    예상 출력
    16
    
  2. 예제 2

    입력
    4 3 1000000007
    
    예상 출력
    95800320
    
  3. 예제 3

    입력
    100 100 998244353
    
    예상 출력
    848530760