atcoder#AGC055F. [AGC055F] Creative Splitting

[AGC055F] Creative Splitting

题目描述

整数 N, K N,\ K が与えられます。

長さ K K の整数列 a=[a1, a2, , aK] a=[a_1,\ a_2,\ \ldots,\ a_K] が全ての 1  i  K 1\ \le\ i\ \le\ K について 1  ai  i 1\ \le\ a_i\ \le\ i を満たすとき、a a 良い列と呼びます。

長さ NK NK の整数列 b=[b1, b2, , bNK] b=[b_1,\ b_2,\ \ldots,\ b_{NK}] が次の条件を満たすとき、b b 素晴らしい列と呼びます: b b N N 個の長さ K K の(連続とは限らない)部分列に分解する方法であって、各部分列が良い列であるような方法が存在する。

f(pos, val) f(pos,\ val) を、bpos=val b_{pos}=val であるような素晴らしい列 b b の個数と定義します。

全ての 1 pos  NK 1\le\ pos\ \le\ NK , 1  val  K 1\ \le\ val\ \le\ K について f(pos, val) f(pos,\ val) を求めてください。これらの数値は非常に大きい可能性があるため、これらを素数 P P で割った余りを出力してください。

输入格式

入力は以下の形式で標準入力から与えられる。

N N K K P P

输出格式

NK NK 行出力せよ。i i 行目の j j 個目の数値が (f(i, j) mod P) (f(i,\ j)\ \bmod\ P) となるようにすること。

题目大意

给定 N,K,PN,K,P

称一个长度为 KK 的数组 {ai}\{a_i\} 是好的当且仅当 1aii1\le a_i\le i

称一个长度为 NKNK 的数组 {bi}\{b_i\} 是合法的当且仅当可以被分成 NN 个长度为 KK 的子序列,每个都是好的。

f(pos,val)f(pos,val) 表示 bpos=valb_{pos}=val 的合法序列数。对 1posNK,1valK1\le pos\le NK,1\le val\le K 求出 f(pos,val)modPf(pos,val)\bmod P

1N,K20,108P1091\le N,K\le 20,10^8\le P\le 10^9PP 为质数。

2 2 965166677
6 0 
4 2 
4 2 
3 3

提示

制約

  • 1  N  20 1\ \le\ N\ \le\ 20
  • 1  K  20 1\ \le\ K\ \le\ 20
  • 108  P  109 10^8\ \le\ P\ \le\ 10^9
  • P P は素数である。

Sample Explanation 1

以下の 6 6 個の素晴らしい列が存在します。 - [1, 1, 1, 1] [1,\ 1,\ 1,\ 1] : [b1, b2], [b3, b4] [b_1,\ b_2],\ [b_3,\ b_4] に分割できます。 - [1, 1, 1, 2] [1,\ 1,\ 1,\ 2] : [b1, b2], [b3, b4] [b_1,\ b_2],\ [b_3,\ b_4] に分割できます。 - [1, 2, 1, 1] [1,\ 2,\ 1,\ 1] : [b1, b2], [b3, b4] [b_1,\ b_2],\ [b_3,\ b_4] に分割できます。 - [1, 2, 1, 2] [1,\ 2,\ 1,\ 2] : [b1, b2], [b3, b4] [b_1,\ b_2],\ [b_3,\ b_4] に分割できます。 - [1, 1, 2, 1] [1,\ 1,\ 2,\ 1] : [b1, b3], [b2, b4] [b_1,\ b_3],\ [b_2,\ b_4] に分割できます。 - [1, 1, 2, 2] [1,\ 1,\ 2,\ 2] : [b1, b3], [b2, b4] [b_1,\ b_3],\ [b_2,\ b_4] に分割できます。