問題文
1,dots,n と \-1 からなる数列 a1,dots,an と整数 d が与えられます。 以下の条件を満たす数列 p1,dots,pn はいくつありますか? 答えを 998244353 で割ったあまりを出力してください。
- p1,dots,pn は 1,dots,n の順列
- i=1,dots,n について、 aineq−1 ならば ai=pi (つまり、a1,dots,an の \-1 の項を適切に置き換えることで p1,dots,pn に書き換えできる)
- i=1,dots,n について、 ∣pi−i∣led
制約
- 1ledle5
- d<nle500
- 1leailen または ai=−1
- aineq−1 ならば ∣ai−i∣led
- ineqj かつ ai,ajneq−1 ならば aineqaj
- 入力はすべて整数
入力
入力は以下の形式で標準入力から与えられる。
n d
a1 dots an
出力
条件を満たす数列の数を 998244353 で割ったあまりを出力せよ。
入力例 1
4 2
3 -1 1 -1
出力例 1
2
(3,2,1,4) と (3,4,1,2) が条件を満たします。
入力例 2
5 1
2 3 4 5 -1
出力例 2
0
\-1 を置き換えて得られる 1,2,3,4,5 の順列は (2,3,4,5,1) のみです。 この順列は、5 項目が条件を満たさないため、答えは 0 です。
入力例 3
16 5
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
出力例 3
794673086
998244353 で割ったあまりを出力してください。