AT_arc127_e [ARC127E] Priority Queue

Description

[problemUrl]: https://atcoder.jp/contests/arc127/tasks/arc127_e 長さ $ A+B $ の整数列 $ (X_1,X_2,\cdots,X_{A+B}) $ が与えられます. $ X $ はちょうど $ A $ 個の $ 1 $ とちょうど $ B $ 個の $ 2 $ を含みます. すぬけくんは集合 $ s $ を持っており,最初 $ s $ は空です. 彼は今から,$ A+B $ 回の操作を行います. $ i $ 回目の操作は以下のような行動です. - $ X_i=1 $ の時: $ 1\ \leq\ v\ \leq\ A $ を満たす整数 $ v $ を選び,$ s $ に追加する. ただし,今までの操作で選んだことのある整数は $ v $ として選べない. - $ X_i=2 $ の時: $ s $ の中で最大値となる要素を削除する. なお,この操作の直前に $ s $ が空でないことは入力から保証される. 最終的な $ s $ としてありうる集合は何通りあるでしょうか? 答えを $ 998244353 $ で割った余りを求めてください.

Input Format

入力は以下の形式で標準入力から与えられる. > $ A $ $ B $ $ X_1 $ $ X_2 $ $ \cdots $ $ X_{A+B} $

Output Format

答えを $ 998244353 $ で割った余りを出力せよ.

Explanation/Hint

### 制約 - $ 1\ \leq\ A\ \leq\ 5000 $ - $ 0\ \leq\ B\ \leq\ A-1 $ - $ 1\ \leq\ X_i\ \leq\ 2 $ - $ X_i=1 $ を満たす $ i $ がちょうど $ A $ 個存在する. - $ X_i=2 $ を満たす $ i $ がちょうど $ B $ 個存在する. - $ X_i=2 $ の操作を行う直前で $ s $ は空ではない. - 入力される値はすべて整数である. ### Sample Explanation 1 最終的な $ s $ としてありうる状態は,$ s=\{1,2\},\{1,3\} $ の $ 2 $ 通りです. 例えば,以下のように操作すると,最終的に $ s=\{1,3\} $ となります. - $ i=1 $: $ s $ に $ 2 $ を追加する. - $ i=2 $: $ s $ に $ 1 $ を追加する. - $ i=3 $: $ s $ から $ 2 $ を削除する. - $ i=4 $: $ s $ に $ 3 $ を追加する.