国际解析竞赛中的一道题目引起了你的注意。
输入给出了两个表达式,每个表达式都代表一个生成单棵树的过程。该生成过程是随机的,这意味着每次执行该过程时可能会生成不同的树。你需要计算这两个表达式共同能够生成的树的数量。
表达式的语法如下:
$$E ::= ‘1’ | ‘(’ E E ‘)’$$
树根据以下过程从表达式中生成:
- 表达式
1生成一棵只有一个标号为 1 的顶点的树。 - 对于两个表达式 $E_1$ 和 $E_2$,表达式 $(E_1E_2)$ 按如下方式生成一棵树:
- 从 $E_1$ 生成一棵有 $n_1$ 个顶点的树 $T_1$,从 $E_2$ 生成一棵有 $n_2$ 个顶点的树 $T_2$。
- 然后,将 $T_2$ 中所有顶点的标号增加 $n_1$。
- 之后,随机选择两个顶点,一个来自 $T_1$,另一个来自 $T_2$。添加一条连接它们的边,形成一棵标号为 1 到 $(n_1 + n_2)$ 的树,这就是由 $(E_1E_2)$ 生成的树。
例如,表达式 (11) 只能生成图 D.1 中最左侧的树,而 (1(11)) 可以生成其余两棵树。
图 D.1. 由两个表达式 (11) 和 (1(11)) 生成的树
同一棵树可能由不同的表达式生成。中间的树也可以由 ((11)1) 生成。
对于给定的两个长度相同的表达式,计算这两个表达式共同能够生成的树的数量。注意,由它们生成的树总是具有相同数量的顶点。
如果存在两个下标 $i$ 和 $j$,使得标号为 $i$ 和 $j$ 的顶点在其中一棵树中由边连接,而在另一棵树中没有连接,则认为这两棵树不同。
输入格式
输入包含两行,每行包含一个表达式字符串。这两个字符串长度相同,长度在 1 到 $7 \times 10^5$ 之间(含边界),并遵循上述语法。
输出格式
输出两个表达式共同能够生成的树的数量,对 998 244 353 取模。
样例
样例输入 1
((1(11))1) ((11)(11))
样例输出 1
1
样例输入 2
(1(11)) (1(11))
样例输出 2
2
样例输入 3
(((11)(11))((11)1)) ((1(11))(1(1(11))))
样例输出 3
3
样例输入 4
((11)(((1(11))1)((11)1))) (1(((11)((11)(11)))(11)))
样例输出 4
4
说明
对于样例输入 1,两个表达式可以生成的树如图 D.2 所示。上面六棵树对应第一个表达式,下面四棵树对应第二个表达式。只有每一行最左侧的树可以由两者共同生成。
图 D.2. 样例输入 1 的说明