小清新计数题
题目描述
小 A 正在电脑上玩一个叫做 Truth or Lie 的游戏。
游戏开始时电脑会给出 $n$ 句话,每句话形如“第 $x$ 句话为真”或“第 $x$ 句话为假”,其中 $x$ 是一个 $1$ 到 $n$ 的整数,你只要选择“Good”或者“Bad”,“Good”表示可以决定每句话的真假使每句话的内容都成立,“Bad”反之。
作为一个菜鸡,小 A 只会不停地点“Good”,靠脸过关。
在无数次失败后,非洲人小 A 发现游戏每关中,每句话包含的是“真”还是“假”是固定的,但是每句话中的 $x$ 是在 $1$ 到 $n$ 均匀随机的。
现在小 A 告诉了你某一关每句话的真假,用一个 $01$ 序列表示。第 $i$ 位为 $0$ 表示第 $i$ 句话包含“假”,否则表示包含“真”。现在他想要知道使得点击“Good”正确的方案数。
由于方案数可能比较大,你需要输出方案数对 $998244353$ 取模的结果。
(读不懂题的请移步样例解释)
输入输出格式
输入格式
一行一个 $01$ 序列,它的长度即为 $n$。
输出格式
输出方案数对 $998244353$ 取模的结果。
输入输出样例
输入样例 #1
01
输出样例 #1
1
输入样例 #2
10101
输出样例 #2
1154
输入样例 #3
10101101010111110100110100101010110001010010101001
输出样例 #3
322173207
说明
### 样例解释
第一句话的内容为“某句话为假”,第二句话的内容为“某句话为真”。所有可能情况如下:
1. 第一句话的内容为“第一句话为假”,第二句话的内容为“第一句话为真”,结果应为 Bad。
2. 第一句话的内容为“第一句话为假”,第二句话的内容为“第二句话为真”,结果应为 Bad。
3. 第一句话的内容为“第二句话为假”,第二句话的内容为“第一句话为真”,结果应为 Bad。
4. 第一句话的内容为“第二句话为假”,第二句话的内容为“第二句话为真”,结果应为 Good,因为只需认为第一句话为假,第二句话为真就符合两句话,所以是 Good。
所以共有一种合法方案。
### 数据范围
- 对于$10\%$ 的数据,$n \leq 7$;
- 对于$20\%$ 的数据,$n \leq 9$;
- 对于$60\%$ 的数据,$n \leq 20$;
- 对于$100\%$ 的数据,$1 \leq n \leq 50$。