#arc132c. [arc132_c]Almost Sorted

[arc132_c]Almost Sorted

問題文

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

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

制約

  • 1ledle51 \\le d \\le 5
  • d<nle500d < n \\le 500
  • 1leailen1\\le a_i \\le n または ai=1a_i=-1
  • aineq1a_i\\neq -1 ならば aiiled|a_i-i|\\le d
  • ineqji\\neq j かつ ai,ajneq1a_i, a_j \\neq -1 ならば aineqaja_i\\neq a_j
  • 入力はすべて整数

入力

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

nn dd a1a_1 dots\\dots ana_n

出力

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


入力例 1

4 2
3 -1 1 -1

出力例 1

2

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


入力例 2

5 1
2 3 4 5 -1

出力例 2

0

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


入力例 3

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

出力例 3

794673086

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