AT_ttpc2024_1_b Self Checkout
Description
$ 1, 2, 3 $ からなる長さ $ N $ の数列 $ S $ が与えられます。 $ 1, 2 $ からなる数列 $ A $ であって、以下の問題の答えが $ S $ になるようなものの個数を $ 998244353 $ で割ったあまりを求めてください。ここで、求める数列 $ A $ の個数は有限となることが示せます。
> 空の数列 $ T $ があります。 $ 1 $ , $ 2 $ からなる数列 $ A $ が与えられます。次の処理を行った後の数列 $ T $ を求めてください。
>
> 1. 変数 $ C $ を $ C = 0 $ として初期化する。
> 2. $ A $ に $ 1 $ が含まれるならば、 $ 1 $ のうち最も先頭に近いものを $ A $ から取り除き、 $ C $ に $ 1 $ を加算する。
> 3. $ A $ が空でないならば、先頭の要素 $ x $ を $ A $ から取り除き、 $ C $ に $ x $ を加算する。
> 4. $ T $ の末尾に $ C $ を追加する。
> 5. $ A $ が空ならば処理を終了する。そうでないなら 1. に戻る。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N $ $ S_1 $ $ S_2 $ $ \dots $ $ S_N $
Output Format
条件を満たす数列 $ A $ の個数を $ 998244353 $ で割ったあまりを出力せよ。
Explanation/Hint
### Sample Explanation 1
問題の答えが $ (3,2) $ となる数列 $ A $ は $ (1,2,2) $ , $ (2,1,2) $ , $ (2,2,1) $ , $ (2,1,1,1) $ , $ (1,2,1,1) $ の $ 5 $ 通りです。
例えば $ (2,1,1,1) $ の場合は、以下のように問題は処理されます。
- $ A $ の $ 1 $ のうち最も先頭に近いものである $ A_2 = 1 $ を削除する。 $ A = (2,1,1) $ , $ C = 1 $ となる。
- $ A $ の先頭の要素である $ A_1 = 2 $ を削除する。 $ A = (1,1) $ , $ C = 3 $ となる。
- $ C $ を $ T $ の末尾に追加する。 $ T = (3) $ となる。
- $ A $ の $ 1 $ のうち最も先頭に近いものである $ A_1 = 1 $ を削除する。 $ A = (1) $ , $ C = 1 $ となる。
- $ A $ の先頭の要素である $ A_1 = 1 $ を削除する。 $ A = () $ , $ C = 2 $ となる。
- $ C $ を $ T $ の末尾に追加する。 $ T = (3, 2) $ となる。
### Sample Explanation 3
問題の答えが $ S $ となる数列 $ A $ の個数が $ 0 $ 個の場合もあります。
### Constraints
- 入力はすべて整数
- $ 1 \le N \le 10^6 $
- $ 1 \le S_i \le 3 $