AT_arc169_c [ARC169C] Not So Consecutive
Description
[problemUrl]: https://atcoder.jp/contests/arc169/tasks/arc169_c
整数 $ N $ が与えられます. 長さ $ N $ の整数列 $ x=(x_1,x_2,\cdots,x_N) $ は,以下の条件を満たすとき(そしてそのときのみ)**よい**数列と呼ばれます.
- $ x $ の各要素は $ 1 $ 以上 $ N $ 以下の整数である.
- 各整数 $ i $ ($ 1\ \leq\ i\ \leq\ N $) に対し,$ i $ が $ i+1 $ 個以上連続して並ぶような場所が $ x $ 内に存在しない.
長さ $ N $ の整数列 $ A=(A_1,A_2,\cdots,A_N) $ が与えられます. $ A $ の各要素は $ 1 $ 以上 $ N $ 以下の整数もしくは $ -1 $ です. それぞれの $ -1 $ を $ 1 $ 以上 $ N $ 以下の整数に置き換えることで得られるよい数列の個数を $ 998244353 $ で割ったあまりを求めてください.
Input Format
入力は以下の形式で標準入力から与えられる.
> $ N $ $ A_1 $ $ A_2 $ $ \cdots $ $ A_N $
Output Format
答えを出力せよ.
Explanation/Hint
### 制約
- $ 1\ \leq\ N\ \leq\ 5000 $
- $ A_i=-1 $ もしくは $ 1\ \leq\ A_i\ \leq\ N $
- 入力される値はすべて整数.
### Sample Explanation 1
それぞれの $ -1 $ を $ 1 $ 以上 $ 2 $ 以下の整数で置き換えて得られる数列は $ 4 $ 通りあります. ここで $ A=(1,1) $ について考えると,$ 1 $ が $ 2 $ 個連続してしまうためよい数列ではありません. それ以外の $ A=(1,2),(2,1),(2,2) $ について考えると,これらはすべてよい数列です. よって答えは $ 3 $ です.