问题陈述
你有两个字符串 A=A1A2...An 和 B=B1B2...Bn,它们具有相同的长度,并且由字符 0 和 1 组成。A 和 B 中的 1 的数量相等。
你决定使用以下算法来转换 A:
- 设 a1, a2, ..., ak 是 A 中 1 的索引。
- 设 b1, b2, ..., bk 是 B 中 1 的索引。
- 分别独立且均匀地选取 a 和 b 的随机排列。
- 对于 i 从 1 到 k,按顺序交换 Aai 和 Abi。
设 P 是在上述过程后字符串 A 和 B 变得相等的概率。
设 Z=P×(k!)2。显然,Z 是一个整数。
求 Z 对 998244353 取模的结果。
约束条件
- 1≤∣A∣=∣B∣≤10,000
- A 和 B 由字符 0 和 1 组成。
- A 和 B 中包含的 1 的数量相等。
- A 和 B 至少包含一个 1。
部分得分
- 通过满足 1≤∣A∣=∣B∣≤500 的测试集将获得 1200 分。
输入
输入以以下格式从标准输入给出:
A
B
输出
输出 Z 对 998244353 取模的结果。
示例输入 1
1010
1100
示例输出 1
3
经过前两步后,a=[1,3],b=[1,2]。在重新排列 a 和 b 后,有 4 种可能的情况:
- a=[1,3],b=[1,2]。初始状态下,A=1010。在交换(A1, A1)后,A=1010。在交换(A3, A2)后,A=1100。
- a=[1,3],b=[2,1]。初始状态下,A=1010。在交换(A1, A2)后,A=0110。在交换(A3, A1)后,A=1100。
- a=[3,1],b=[1,2]。初始状态下,A=1010。在交换(A3, A1)后,A=1010。在交换(A1, A2)后,A=0110。
- a=[3,1],b=[2,1]。初始状态下,A=1010。在交换(A3, A2)后,A=1100。在交换(A1, A1)后,A=1100。
在 4 种情况中,有 3 种结果为 A=B。因此,P=3/4,Z=3。
示例输入 2
01001
01001
示例输出 2
4
没有任何交换能改变 A,所以我们总是有 A=B。
示例输入 3
101010
010101
示例输出 3
36
每一种可能的三次交换都能将 A 中的 1 放置到正确的位置。
示例输入 4
1101011011110
0111101011101
示例输出 4
932171449