题目描述
整数 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 で割った余りを出力してください。
输入格式
入力は以下の形式で標準入力から与えられる。
N K P
输出格式
NK 行出力せよ。i 行目の j 個目の数値が (f(i, j) mod P) となるようにすること。
题目大意
给定 N,K,P。
称一个长度为 K 的数组 {ai} 是好的当且仅当 1≤ai≤i。
称一个长度为 NK 的数组 {bi} 是合法的当且仅当可以被分成 N 个长度为 K 的子序列,每个都是好的。
设 f(pos,val) 表示 bpos=val 的合法序列数。对 1≤pos≤NK,1≤val≤K 求出 f(pos,val)modP。
1≤N,K≤20,108≤P≤109 且 P 为质数。
2 2 965166677
6 0
4 2
4 2
3 3
提示
制約
- 1 ≤ N ≤ 20
- 1 ≤ K ≤ 20
- 108 ≤ P ≤ 109
- P は素数である。
Sample Explanation 1
以下の 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] に分割できます。