AT_yahoo_procon2019_qual_f Pass

题目描述

# Pass 有 $N$ 个人排成一列。给定一个长度为 $N$ 的字符串 $S$,第 $i$ 个人手中的球的数量如下: - 当 $S_i=0$ 时,这个人手中有两个红球; - 当 $S_i=1$ 时,这个人手中有一个红球和一个蓝球; - 当 $S_i=2$ 时,这个人手中有两个蓝球。 一开始,高桥君手中没有球,他要进行 $2N$ 次操作,每次操作如下: - 如果有人手中有球,则所有人同时选择一个自己手中的球,将其交给前面的人(第一个人将球交给高桥君); - 高桥君将收到的球放到队列的末尾。 请计算出高桥君可以得到的所有队列的数量,答案对 $998244353$ 取模。

输入格式

> $S$

输出格式

输出高桥君可以得到的所有队列的数量,答案对 $998244353$ 取模。 ## 样例 #1 ### 样例输入 #1 ``` 02 ``` ### 样例输出 #1 ``` 3 ``` ## 样例 #2 ### 样例输入 #2 ``` 1210 ``` ### 样例输出 #2 ``` 55 ``` ## 样例 #3 ### 样例输入 #3 ``` 12001021211100201020 ``` ### 样例输出 #3 ``` 543589959 ```

说明/提示

- $1\leq |S|\leq 2000$ - $S$ 仅包含数字 $0,1,2$。 注意:输入中不会给出 $N$,而是通过字符串 $S$ 的长度间接给出。 ### 样例解释 可以将队列看作一个长度为 $2N$ 的字符串,第 $i$ 个字符表示第 $i$ 个人交给高桥君的球的颜色,红色用字母 `r` 表示,蓝色用字母 `b` 表示。例如,字符串 `rrbb` 表示高桥君先收到两个红球,然后收到两个蓝球。 对于样例 #1,可以构造出三个合法的队列:`rrbb`,`rbrb` 和 `rbbr`。 对于样例 #2 和样例 #3,可以使用动态规划的方法求解。