atcoder#ARC118E. [ARC118E] Avoid Permutations

[ARC118E] Avoid Permutations

配点 : 800800

問題文

(1,2,,N)(1, 2, \ldots, N) の順列 P=(P1,P2,,PN)P = (P_1, P_2, \ldots, P_N) に対して 次の問題を考え、その答えを f(P)f(P) と書くことにします。

(N+2)×(N+2)(N+2)\times (N+2) のマス目があり、行には上から順に 0,1,,N+10, 1, \ldots, N+1 の番号が、列には左から順に 0,1,,N+10, 1, \ldots, N+1 の番号がつけられています。ii 行目・jj 列目のマスを (i,j)(i,j) と表します。

(0,0)(0,0) を出発して、右または下の隣り合うマスへの移動を繰り返すことで、(N+1,N+1)(N+1,N+1) まで移動する経路を考えます。ただし、1iN1\leq i\leq N に対してマス (i,Pi)(i, P_i) は通ってはいけません。このような経路は何通りあるでしょうか?

正の整数 NN および整数列 A=(A1,A2,,AN)A = (A_1, A_2, \ldots, A_N) が与えられます。各 AiA_i は、1-1 であるか、あるいは 11 以上 NN 以下の整数です。

(1,2,,N)(1, 2, \ldots, N) の順列 P=(P1,P2,,PN)P = (P_1, P_2, \ldots, P_N) であって、Ai1    Pi=AiA_i\neq -1 \implies P_i = A_i を満たすものを考えます。そのようなすべての PP に対する f(P)f(P) の総和を、998244353998244353 で割った余りを求めてください。

制約

  • 1N2001\leq N\leq 200
  • Ai=1A_i = -1 あるいは 1AiN1\leq A_i\leq N
  • iji\neq j に対し、Ai1,Aj1A_i\neq -1, A_j\neq -1 ならば AiAjA_i\neq A_j

入力

入力は以下の形式で標準入力から与えられます。

NN

A1A_1 A2A_2 \ldots ANA_N

出力

答えを出力してください。

4
1 -1 4 -1
41

22 つの順列 P=(1,2,4,3)P = (1,2,4,3) および P=(1,3,4,2)P = (1,3,4,2) に対する f(P)f(P) の和が求めるものです。それぞれの PP の場合に、マス目において通れないマスを図示すると、次のようになります(通れるマス・通れないマスをそれぞれ . # で表しています)。

......         ......
  .#....         .#....
  ..#...         ...#..
  ....#.         ....#.
  ...#..         ..#...
  ......         ......
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 が答えとなります。

4
4 3 2 1
2

この例では、計算対象となる順列 PPP=(4,3,2,1)P = (4,3,2,1) のひとつです。

3
-1 -1 -1
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 が答えとなります。