만드는 중입니다

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

LIS 개수 세기

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

요약
N, M, 소수 P가 주어질 때 길이 N*M인 순열 중 LIS가 N, LDS가 M인 것을 세고, 위치마다 값별 개수를 P로 나눈 나머지로 구합니다.
난이도

어려움10점 중 9점

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

문제

정수 N,MN, M과 소수 PP가 주어진다.

길이가 N⋅MN \cdot M인 순열 중 최장 증가 부분 수열의 길이가 NN이고 최장 감소 부분 수열의 길이가 MM인 순열을 모두 고려한다.

1≤pos,val≤N⋅M1 \le pos, val \le N \cdot M인 각 pospos, valval에 대해 f(pos,val)f(pos, val)을 정의한다. f(pos,val)f(pos, val)은 pospos번째 원소가 valval인 이런 순열의 개수이다.

모든 1≤pos,val≤N⋅M1 \le pos, val \le N \cdot M에 대해 f(pos,val) mod Pf(pos, val) \bmod P를 구하라.

입력

한 줄에 정수 NN, MM, PP가 주어진다. (1≤N⋅M≤1001 \le N \cdot M \le 100, 108≤P≤10910^8 \le P \le 10^9, PP는 소수이다.)

출력

N⋅M×N⋅MN \cdot M \times N \cdot M 크기의 표를 출력한다. pospos번째 줄의 valval번째 값은 f(pos,val) mod Pf(pos, val) \bmod P이다.

예제2

  1. 예제 1

    입력
    3 2 998244353
    
    예상 출력
    0 10 10 5 0 0
    10 0 0 6 9 0
    10 0 0 4 6 5
    5 6 4 0 0 10
    0 9 6 0 0 10
    0 0 5 10 10 0
    
  2. 예제 2

    입력
    1 7 100000007
    
    예상 출력
    0 0 0 0 0 0 1
    0 0 0 0 0 1 0
    0 0 0 0 1 0 0
    0 0 0 1 0 0 0
    0 0 1 0 0 0 0
    0 1 0 0 0 0 0
    1 0 0 0 0 0 0