矩阵的秩
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}p 为素数,\mathbb{F}_p 是阶为 p有限域
\hspace{15pt}给出 n,m,p,考虑所有定义在 \mathbb{F}_p 上的 nm 列,且行向量均为非零向量的矩阵,对于每个 k 满足 0 \le k \le \min(n,m),你需要求出有多少个 n \times m 的矩阵满足:
\hspace{23pt}\bullet\,每两个行向量之间都不成比例。也就是说,对于任意 1 \leq i \lt j \leq n,不存在标量 \lambda \in \mathbb{F}_p\lambda \neq 0 使得第 i 行等于第 j 行的 \lambda 倍。
\hspace{23pt}\bullet\,矩阵在域 \mathbb{F}_p 上的秩恰好为 k
\hspace{15pt}由于答案可能很大,请将答案对 998\,244\,353 取模后输出。

【名词解释】
\hspace{15pt}有限域:在数学中,有限域(也称为伽罗瓦域)是一个包含有限个元素的集合。这些元素遵循乘法、加法、减法和除法的运算规则,且所有这些运算均满足算术的基本规则。有限域最常见的例子是由模 p 的整数给出,其中 p 是素数。
\hspace{15pt}当我们说 \mathbb{F}_p 是阶为 p 的有限域时,意味着 \mathbb{F}_p 恰好包含 p 个不同的元素,且 p 为素数。\mathbb{F}_p 的元素是整数 0,1,2,\dots,p-1,域的运算均在模 p 下进行。例如,若 p=5,则 \mathbb{F}_5 是集合 \{0,1,2,3,4\},在这个域中:2+3=04 \times 4 = 1

输入描述:

\hspace{15pt}在一行上输入三个整数 n, m, p\left(1\ \le n, m, p \le 10^5\right)。保证 p 是一个质数,含义如题。

输出描述:

\hspace{15pt}在一行上输出 \min(n, m)+1 个整数,第 i 个整数表示当 k = i-1 时的答案对 998\,244\,353 取模的结果。
示例1

输入

复制
2 2 2

输出

复制
0 0 6
示例2

输入

复制
3 2 5

输出

复制
0 0 7680
示例3

输入

复制
3 3 3

输出

复制
0 0 2496 11232