配点 : 1800 点
問題文
整数 N,K が与えられます。
長さ K の整数列 a=[a1,a2,…,aK] が全ての 1≤i≤K について 1≤ai≤i を満たすとき、a を良い列と呼びます。
長さ NK の整数列 b=[b1,b2,…,bNK] が次の条件を満たすとき、b を素晴らしい列と呼びます: b を N 個の長さ K の(連続とは限らない)部分列に分解する方法であって、各部分列が良い列であるような方法が存在する。
f(pos,val) を、bpos=val であるような素晴らしい列 b の個数と定義します。
全ての 1≤pos≤NK, 1≤val≤K について f(pos,val) を求めてください。これらの数値は非常に大きい可能性があるため、これらを素数 P で割った余りを出力してください。
制約
- 1≤N≤20
- 1≤K≤20
- 108≤P≤109
- P は素数である。
入力
入力は以下の形式で標準入力から与えられる。
N K P
出力
NK 行出力せよ。i 行目の j 個目の数値が (f(i,j)modP) となるようにすること。
2 2 965166677
6 0
4 2
4 2
3 3
以下の 6 個の素晴らしい列が存在します。
- [1,1,1,1]: [b1,b2],[b3,b4] に分割できます。
- [1,1,1,2]: [b1,b2],[b3,b4] に分割できます。
- [1,2,1,1]: [b1,b2],[b3,b4] に分割できます。
- [1,2,1,2]: [b1,b2],[b3,b4] に分割できます。
- [1,1,2,1]: [b1,b3],[b2,b4] に分割できます。
- [1,1,2,2]: [b1,b3],[b2,b4] に分割できます。