P15764 [JAG 2025 Summer Camp #1] LOGCFL
题目描述
给定一个大小为 $N \times N \times N$ 的三维整数数组 $A$。
初始化以下变量:
```
integer x = 0;
integer w = 1;
stack s = {};
```
然后,对于每个 $t = 0, 1, \ldots, N - 1$,选择一个满足 $-1 \leq y_t < N$ 的整数 $y_t$,并执行以下操作:
如果 $0 \leq y_t$,则执行以下操作:
```
w *= A[t][x][y];
s.push(x);
x = y;
```
上述中的 $y$ 表示 $y_t$。
如果 $y_t = -1$,则执行以下操作:
```
assert (!s.empty());
w *= A[t][x][s.top()];
x = (x + s.top()) % N;
s.pop();
```
如果在执行操作前栈为空,则不能选择 $y_t = -1$。
注意,栈支持以下操作:
- **push(x)**:向集合中添加一个元素 $x$。
- **pop()**:移除最近添加的元素。
- **top()**:返回最近添加的元素的值。
对于每个 $i = 0, 1, \ldots, N - 1$,考虑所有可能的序列 $y_0, y_1, \ldots, y_{N-1}$,使得最终的 $x$ 值为 $i$。计算所有此类序列对应的 $w$ 值之和,并将结果对 $998244353$ 取模后输出。
输入格式
输入格式如下:
$$\begin{aligned}
& N \\
& A_{0,0,0} \cdots A_{0,0,N-1} \\
& \vdots \\
& A_{0,N-1,0} \cdots A_{0,N-1,N-1} \\
& \vdots \\
& \vdots \\
& A_{N-1,0,0} \cdots A_{N-1,0,N-1} \\
& \vdots \\
& A_{N-1,N-1,0} \cdots A_{N-1,N-1,N-1}
\end{aligned}$$
$A_{i,j,k}$ 表示 $A[i][j][k]$ 的值。
- $1 \leq N \leq 30$
- $0 \leq A_{i,j,k} \leq 10^9 \ (1 \leq i, j, k \leq N)$
- 所有输入值均为整数。
输出格式
输出 $N$ 行。在第 $i$ 行($0 \leq i < N$),输出 $i$ 对应的答案。