atcoder#ARC132C. [ARC132C] Almost Sorted

[ARC132C] Almost Sorted

配点 : 600600

問題文

1,,n1,\dots, n1-1 からなる数列 a1,,ana_1,\dots,a_n と整数 dd が与えられます。 以下の条件を満たす数列 p1,,pnp_1,\dots,p_n はいくつありますか? 答えを 998244353998244353 で割ったあまりを出力してください。

  • p1,,pnp_1,\dots,p_n1,,n1,\dots, n の順列
  • i=1,,ni=1,\dots,n について、 ai1a_i\neq -1 ならば ai=pia_i=p_i (つまり、a1,,ana_1,\dots,a_n1-1 の項を適切に置き換えることで p1,,pnp_1,\dots,p_n に書き換えできる)
  • i=1,,ni=1,\dots,n について、 piid|p_i - i|\le d

制約

  • 1d51 \le d \le 5
  • d<n500d < n \le 500
  • 1ain1\le a_i \le n または ai=1a_i=-1
  • ai1a_i\neq -1 ならば aiid|a_i-i|\le d
  • iji\neq j かつ ai,aj1a_i, a_j \neq -1 ならば aiaja_i\neq a_j
  • 入力はすべて整数

入力

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

nn dd

a1a_1 \dots ana_n

出力

条件を満たす数列の数を 998244353998244353 で割ったあまりを出力せよ。

4 2
3 -1 1 -1
2

(3,2,1,4)(3,2,1,4)(3,4,1,2)(3,4,1,2) が条件を満たします。

5 1
2 3 4 5 -1
0

1-1 を置き換えて得られる 1,2,3,4,51,2,3,4,5 の順列は (2,3,4,5,1)(2,3,4,5,1) のみです。 この順列は、55 項目が条件を満たさないため、答えは 00 です。

16 5
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
794673086

998244353998244353 で割ったあまりを出力してください。