#arc118e. [arc118_e]Avoid Permutations

[arc118_e]Avoid Permutations

问题陈述

考虑下面的排列问题 P=(P1,P2,ldots,PN)P = (P_1, P_2, \\ldots, P_N),并且用 f(P)f(P) 表示答案。

我们有一个 (N+2)times(N+2)(N+2)\\times (N+2) 的网格,行从上到下编号为 0,1,ldots,N+10, 1, \\ldots, N+1,列从左到右编号为 0,1,ldots,N+10, 1, \\ldots, N+1。用 (i,j)(i,j) 表示第 iijj 列的格子。

考虑从 (0,0)(0, 0) 移动到 (N+1,N+1)(N+1, N+1) 的路径,每次只能向右或向下移动。但是,对于每个 1leqileqN1\\leq i\\leq N,我们不能经过格子 (i,Pi)(i, P_i)。有多少这样的路径?

给定一个正整数 NN 和一个整数序列 A=(A1,A2,ldots,AN)A = (A_1, A_2, \\ldots, A_N),其中每个 AiA_i1-1 或介于 11NN(包含)之间的整数。

考虑满足 Aineq1impliesPi=AiA_i\\neq -1 \\implies P_i = A_i 的所有排列 P=(P1,P2,ldots,PN)P = (P_1, P_2, \\ldots, P_N)。求所有这样的 PPf(P)f(P) 之和,取模 998244353998244353

约束条件

  • 1leqNleq2001\\leq N\\leq 200
  • Ai=1A_i = -11leqAileqN1\\leq A_i\\leq N
  • 如果 Aineq1A_i\\neq -1Ajneq1A_j\\neq -1,则 AineqAjA_i\\neq A_j

输入

输入以以下格式从标准输入给出:

NN A1A_1 A2A_2 ldots\\ldots ANA_N

输出

输出答案。


示例输入 1

4
1 -1 4 -1

示例输出 1

41

我们要计算两个排列 P=(1,2,4,3)P = (1,2,4,3)P=(1,3,4,2)P = (1,3,4,2)f(P)f(P) 之和。下图显示了它们各自的不可通过的格子,其中 . 表示可通过的格子,# 表示不可通过的格子。

  ......         ......
  .#....         .#....
  ..#...         ...#..
  ....#.         ....#.
  ...#..         ..#...
  ......         ......
P=(1,2,4,3)    P=(1,3,4,2)
  • 对于 P=(1,2,4,3)P = (1,2,4,3),我们有 f(P)=18f(P) = 18
  • 对于 P=(1,3,4,2)P = (1,3,4,2),我们有 f(P)=23f(P) = 23

答案就是它们的和:4141


示例输入 2

4
4 3 2 1

示例输出 2

2

在这个示例中,我们只计算一个排列 P=(4,3,2,1)P = (4,3,2,1)f(P)f(P)


示例输入 3

3
-1 -1 -1

示例输出 3

48
  • 对于 P=(1,2,3)P = (1,2,3),我们有 f(P)=10f(P) = 10
  • 对于 P=(1,3,2)P = (1,3,2),我们有 f(P)=6f(P) = 6
  • 对于 P=(2,1,3)P = (2,1,3),我们有 f(P)=6f(P) = 6
  • 对于 P=(2,3,1)P = (2,3,1),我们有 f(P)=12f(P) = 12
  • 对于 P=(3,1,2)P = (3,1,2),我们有 f(P)=12f(P) = 12
  • 对于 P=(3,2,1)P = (3,2,1),我们有 f(P)=2f(P) = 2

答案就是它们的和:4848