#CF2141E. 完美切割

完美切割

E. 完美切割

时间限制: 每测试 22
内存限制: 每测试 256256 兆字节

你将得到一个由字符 01 和/或 ? 组成的字符串 ss

我们称一个二进制字符串(仅由 0 和/或 1 组成)是完美的,如果你能将字符串切成两个非空部分:一个前缀 aa 和一个后缀 bb,使得对于每个 ii(从 11min(a,b)\min(|a|, |b|)),都有 aibia_i \geq b_i

你的任务是计算将所有问号独立地替换为 01,使得字符串变为完美的方法数量。如果在至少一个位置上两种方式生成的字符不同,则认为两种方式不同。由于答案可能很大,请输出对 998244353998244353 取模的结果。


输入格式

第一行包含一个整数 tt (1t104)(1 \leq t \leq 10^4) — 测试用例的数量。

每个测试用例只有一行,包含一个字符串 ss (2s2105)(2 \leq |s| \leq 2 \cdot 10^5),由字符 01 和/或 ? 组成。

额外约束:所有测试用例的字符串长度之和不超过 21052 \cdot 10^5


输出格式

对于每个测试用例,输出一个整数 — 将所有问号独立替换为 01,使得字符串变为完美的方法数量,对 998244353998244353 取模。


样例

输入

5
0?1
011
????
110?0
0?1?

输出

1
0
15
2
3

样例解释

第一个测试用例:字符串 001 可以拆分为长度为 11 的前缀和长度为 22 的后缀,满足完美条件。替换方式:0?1001,只有这一种。

第二个测试用例:字符串 011 无论如何切割,都无法满足完美条件,答案为 00

第三个测试用例:字符串 ???? 共有 1515 种替换方式可以使其变为完美字符串。

第四个测试用例:可以得到的完美字符串有:

  • 字符串 11010,可以拆分为长度为 22 的前缀和长度为 33 的后缀;
  • 字符串 11000,可以拆分为长度为 44 的前缀和长度为 11 的后缀。

22 种方式。

第五个测试用例:字符串 0?1? 共有 33 种替换方式可以使其变为完美字符串。