题目描述
1,…, n と −1 からなる数列 a1,…,an と整数 d が与えられます。 以下の条件を満たす数列 p1,…,pn はいくつありますか? 答えを 998244353 で割ったあまりを出力してください。
- p1,…,pn は 1,…, n の順列
- i=1,…,n について、 ai= −1 ならば ai=pi (つまり、a1,…,an の −1 の項を適切に置き換えることで p1,…,pn に書き換えできる)
- i=1,…,n について、 ∣pi − i∣≤ d
输入格式
入力は以下の形式で標準入力から与えられる。
n d a1 … an
输出格式
条件を満たす数列の数を 998244353 で割ったあまりを出力せよ。
题目大意
给定一个长度为 n 的数字序列 A,由 1 到 n 之间的整数和 −1 组成。还有一个整数 d。
现在要对这个序列进行变换,将 A 中所有为 −1 的 ai 替换成一个数字,使得得到的序列 P,满足:
- ∀ai=−1,pi=ai。
- P 是 1 到 n 的一个排列。
- ∀∣pi−i∣≤d
试问有多少种这样的排列 P。答案对 998244353 取膜。
4 2
3 -1 1 -1
2
5 1
2 3 4 5 -1
0
16 5
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
794673086
提示
制約
- 1 ≤ d ≤ 5
- d < n ≤ 500
- 1≤ ai ≤ n または ai=−1
- ai= −1 ならば ∣ai−i∣≤ d
- i= j かつ ai, aj = −1 ならば ai= aj
- 入力はすべて整数
Sample Explanation 1
(3,2,1,4) と (3,4,1,2) が条件を満たします。
Sample Explanation 2
−1 を置き換えて得られる 1,2,3,4,5 の順列は (2,3,4,5,1) のみです。 この順列は、5 項目が条件を満たさないため、答えは 0 です。
Sample Explanation 3
998244353 で割ったあまりを出力してください。