题目描述
有两个长度相同、仅由 0 和 1 组成的字符串 A=A1A2…An 和 B=B1B2…Bn。A 和 B 中 1 的个数是相等的。
你决定通过如下的算法改变 A:
- 令 a1,a2,…,ak 为 A 中所有 1 出现的位置的下标。
- 令 b1,b2,…,bk 为 B 中所有 1 出现的位置的下标。
- 将 a 和 b 的元素分别独立地均匀随机排列。
- 然后对于每个 i(1≤i≤k),依次交换 Aai 和 Abi 的值。
完成上述步骤后,设 A 和 B 完全相等的概率为 P。
进一步定义 Z=P×(k!)2。显然,Z 是整数。
请输出 Z 对 998244353 取余的结果。
输入格式
输入为一行,包括两个字符串 A 和 B。
输出格式
输出 Z 对 998244353 取余的结果。
样例 1
输入
1010
1100
输出
3
样例 2
输入
01001
01001
输出
4
样例 3
输入
101010
010101
输出
36
样例 4
输入
1101011011110
0111101011101
输出
932171449
说明/提示
限制
- 1≤∣A∣=∣B∣≤10000
- A 和 B 仅包含 0 和 1
- A 和 B 中的 1 的数量相等,且至少有一个 1
部分分
- 若能通过 1≤∣A∣=∣B∣≤500 数据集,将获得 1200 分。
样例解释 1
最初的两步后,a=[1,3],b=[1,2]。将 a 和 b 随机排列后,可能的四种组合如下:
- 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。
在上述四种结果中,有三种 A=B,因此 P=3/4,Z=3。
样例解释 2
通过 A 的元素交换,A 始终不会改变,所以总有 A=B。
样例解释 3
无论三次 A 的元素交换如何发生,A 中的 1 总会正确到达目标位置。
由 ChatGPT 5 翻译