#ATagc055f. [AGC055F] Creative Splitting

[AGC055F] Creative Splitting

题目描述

给定整数 N, KN,\ K

当长度为 KK 的整数序列 a=[a1, a2, , aK]a=[a_1,\ a_2,\ \ldots,\ a_K] 满足对于所有 1iK1 \leq i \leq K,都有 1aii1 \leq a_i \leq i 时,称 aa好序列

当长度为 NKNK 的整数序列 b=[b1, b2, , bNK]b=[b_1,\ b_2,\ \ldots,\ b_{NK}] 满足以下条件时,称 bb优秀序列:存在一种将 bb 分解为 NN 个长度为 KK 的(不一定连续的)子序列的方法,使得每个子序列都是好序列。

定义 f(pos, val)f(pos,\ val) 为满足 bpos=valb_{pos}=val 的优秀序列 bb 的个数。

请你对于所有 1posNK1 \leq pos \leq NK1valK1 \leq val \leq K,求出 f(pos, val)f(pos,\ val)。由于这些数可能非常大,请输出它们对素数 PP 取模的结果。

输入格式

输入从标准输入中给出,格式如下:

NN KK PP

输出格式

输出共 NKNK 行。第 ii 行的第 jj 个数为 (f(i, j)modP)(f(i,\ j) \bmod P)

样例 1

输入

2 2 965166677

输出

6 0 
4 2 
4 2 
3 3

说明/提示

限制

  • 1N201 \leq N \leq 20
  • 1K201 \leq K \leq 20
  • 108P10910^8 \leq P \leq 10^9
  • PP 是素数。

样例解释 1

存在以下 66 个优秀序列。

  • [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]

由 ChatGPT 4.1 翻译