问题陈述
考虑下面的排列问题 P=(P1,P2,ldots,PN),并且用 f(P) 表示答案。
我们有一个 (N+2)times(N+2) 的网格,行从上到下编号为 0,1,ldots,N+1,列从左到右编号为 0,1,ldots,N+1。用 (i,j) 表示第 i 行 j 列的格子。
考虑从 (0,0) 移动到 (N+1,N+1) 的路径,每次只能向右或向下移动。但是,对于每个 1leqileqN,我们不能经过格子 (i,Pi)。有多少这样的路径?
给定一个正整数 N 和一个整数序列 A=(A1,A2,ldots,AN),其中每个 Ai 是 −1 或介于 1 到 N(包含)之间的整数。
考虑满足 Aineq−1impliesPi=Ai 的所有排列 P=(P1,P2,ldots,PN)。求所有这样的 P 的 f(P) 之和,取模 998244353。
约束条件
- 1leqNleq200
- Ai=−1 或 1leqAileqN。
- 如果 Aineq−1 且 Ajneq−1,则 AineqAj。
输入
输入以以下格式从标准输入给出:
N
A1 A2 ldots AN
输出
输出答案。
示例输入 1
4
1 -1 4 -1
示例输出 1
41
我们要计算两个排列 P=(1,2,4,3) 和 P=(1,3,4,2) 的 f(P) 之和。下图显示了它们各自的不可通过的格子,其中 .
表示可通过的格子,#
表示不可通过的格子。
...... ......
.#.... .#....
..#... ...#..
....#. ....#.
...#.. ..#...
...... ......
P=(1,2,4,3) P=(1,3,4,2)
- 对于 P=(1,2,4,3),我们有 f(P)=18。
- 对于 P=(1,3,4,2),我们有 f(P)=23。
答案就是它们的和:41。
示例输入 2
4
4 3 2 1
示例输出 2
2
在这个示例中,我们只计算一个排列 P=(4,3,2,1) 的 f(P)。
示例输入 3
3
-1 -1 -1
示例输出 3
48
- 对于 P=(1,2,3),我们有 f(P)=10。
- 对于 P=(1,3,2),我们有 f(P)=6。
- 对于 P=(2,1,3),我们有 f(P)=6。
- 对于 P=(2,3,1),我们有 f(P)=12。
- 对于 P=(3,1,2),我们有 f(P)=12。
- 对于 P=(3,2,1),我们有 f(P)=2。
答案就是它们的和:48。