問題文
整数 N,K が与えられます。
長さ K の整数列 a=a1,a2,ldots,aK が全ての 1leileK について 1leailei を満たすとき、a を良い列と呼びます。
長さ NK の整数列 b=b1,b2,ldots,bNK が次の条件を満たすとき、b を素晴らしい列と呼びます: b を N 個の長さ K の(連続とは限らない)部分列に分解する方法であって、各部分列が良い列であるような方法が存在する。
f(pos,val) を、bpos=val であるような素晴らしい列 b の個数と定義します。
全ての 1leposleNK, 1levalleK について f(pos,val) を求めてください。これらの数値は非常に大きい可能性があるため、これらを素数 P で割った余りを出力してください。
制約
- 1leNle20
- 1leKle20
- 108lePle109
- P は素数である。
入力
入力は以下の形式で標準入力から与えられる。
N K P
出力
NK 行出力せよ。i 行目の j 個目の数値が (f(i,j)bmodP) となるようにすること。
入力例 1
出力例 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 に分割できます。