AT_agc055_f [AGC055F] Creative Splitting
题目描述
给定整数 $N,\ K$。
当长度为 $K$ 的整数序列 $a=[a_1,\ a_2,\ \ldots,\ a_K]$ 满足对于所有 $1 \leq i \leq K$,都有 $1 \leq a_i \leq i$ 时,称 $a$ 为**好序列**。
当长度为 $NK$ 的整数序列 $b=[b_1,\ b_2,\ \ldots,\ b_{NK}]$ 满足以下条件时,称 $b$ 为**优秀序列**:存在一种将 $b$ 分解为 $N$ 个长度为 $K$ 的(不一定连续的)子序列的方法,使得每个子序列都是好序列。
定义 $f(pos,\ val)$ 为满足 $b_{pos}=val$ 的优秀序列 $b$ 的个数。
请你对于所有 $1 \leq pos \leq NK$,$1 \leq val \leq K$,求出 $f(pos,\ val)$。由于这些数可能非常大,请输出它们对素数 $P$ 取模的结果。
输入格式
输入从标准输入中给出,格式如下:
> $N$ $K$ $P$
输出格式
输出共 $NK$ 行。第 $i$ 行的第 $j$ 个数为 $(f(i,\ j) \bmod P)$。
说明/提示
## 限制
- $1 \leq N \leq 20$
- $1 \leq K \leq 20$
- $10^8 \leq P \leq 10^9$
- $P$ 是素数。
## 样例解释 1
存在以下 $6$ 个优秀序列。
- $[1, 1, 1, 1]$:可以分为 $[b_1, b_2], [b_3, b_4]$。
- $[1, 1, 1, 2]$:可以分为 $[b_1, b_2], [b_3, b_4]$。
- $[1, 2, 1, 1]$:可以分为 $[b_1, b_2], [b_3, b_4]$。
- $[1, 2, 1, 2]$:可以分为 $[b_1, b_2], [b_3, b_4]$。
- $[1, 1, 2, 1]$:可以分为 $[b_1, b_3], [b_2, b_4]$。
- $[1, 1, 2, 2]$:可以分为 $[b_1, b_3], [b_2, b_4]$。
由 ChatGPT 4.1 翻译