#P15764. [JAG 2025 Summer Camp #1] LOGCFL

[JAG 2025 Summer Camp #1] LOGCFL

说明

给定一个大小为 N×N×NN \times N \times N 的三维整数数组 AA

初始化以下变量:

integer x = 0;
integer w = 1;
stack s = {};

然后,对于每个 t=0,1,,N1t = 0, 1, \ldots, N - 1,选择一个满足 1yt<N-1 \leq y_t < N 的整数 yty_t,并执行以下操作:

如果 0yt0 \leq y_t,则执行以下操作:

w *= A[t][x][y];
s.push(x);
x = y;

上述中的 yy 表示 yty_t

如果 yt=1y_t = -1,则执行以下操作:

assert (!s.empty());
w *= A[t][x][s.top()];
x = (x + s.top()) % N;
s.pop();

如果在执行操作前栈为空,则不能选择 yt=1y_t = -1

注意,栈支持以下操作:

  • push(x):向集合中添加一个元素 xx
  • pop():移除最近添加的元素。
  • top():返回最近添加的元素的值。

对于每个 i=0,1,,N1i = 0, 1, \ldots, N - 1,考虑所有可能的序列 y0,y1,,yN1y_0, y_1, \ldots, y_{N-1},使得最终的 xx 值为 ii。计算所有此类序列对应的 ww 值之和,并将结果对 998244353998244353 取模后输出。

输入格式

输入格式如下:

$$\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}$$

Ai,j,kA_{i,j,k} 表示 A[i][j][k]A[i][j][k] 的值。

  • 1N301 \leq N \leq 30
  • $0 \leq A_{i,j,k} \leq 10^9 \ (1 \leq i, j, k \leq N)$
  • 所有输入值均为整数。

输出格式

输出 NN 行。在第 ii 行(0i<N0 \leq i < N),输出 ii 对应的答案。

2
1 10
100 1000
1 3
9 27
92
363
3
2 1 2
1 2 1
1 1 1
2 1 1
2 2 1
2 2 2
2 1 1
1 2 1
1 2 2
63
68
56
4
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
120
120
120
120