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$ 对应的答案。