#ATagc019e. [AGC019E] Shuffle and Swap

[AGC019E] Shuffle and Swap

题目描述

有两个长度相同、仅由 0011 组成的字符串 A=A1A2AnA = A_1A_2\ldots A_nB=B1B2BnB = B_1B_2\ldots B_nAABB11 的个数是相等的。

你决定通过如下的算法改变 AA

  • a1,a2,,aka_1, a_2, \ldots, a_kAA 中所有 11 出现的位置的下标。
  • b1,b2,,bkb_1, b_2, \ldots, b_kBB 中所有 11 出现的位置的下标。
  • aabb 的元素分别独立地均匀随机排列。
  • 然后对于每个 ii1ik1 \leq i \leq k),依次交换 AaiA_{a_i}AbiA_{b_i} 的值。

完成上述步骤后,设 AABB 完全相等的概率为 PP

进一步定义 Z=P×(k!)2Z = P \times (k!)^2。显然,ZZ 是整数。

请输出 ZZ998244353998244353 取余的结果。

输入格式

输入为一行,包括两个字符串 AABB

输出格式

输出 ZZ998244353998244353 取余的结果。

样例 1

输入

1010
1100

输出

3

样例 2

输入

01001
01001

输出

4

样例 3

输入

101010
010101

输出

36

样例 4

输入

1101011011110
0111101011101

输出

932171449

说明/提示

限制

  • 1A=B100001 \leq |A| = |B| \leq 10\,000
  • AABB 仅包含 0011
  • AABB 中的 11 的数量相等,且至少有一个 11

部分分

  • 若能通过 1A=B5001 \leq |A| = |B| \leq 500 数据集,将获得 12001200 分。

样例解释 1

最初的两步后,a=[1,3]a = [1, 3]b=[1,2]b = [1, 2]。将 aabb 随机排列后,可能的四种组合如下:

  • a=[1,3],b=[1,2]a = [1, 3], b = [1, 2]。初始 A=1010A = 1010。交换 A1A_1A1A_1A=1010A = 1010。交换 A3A_3A2A_2A=1100A = 1100
  • a=[1,3],b=[2,1]a = [1, 3], b = [2, 1]。初始 A=1010A = 1010。交换 A1A_1A2A_2A=0110A = 0110。交换 A3A_3A1A_1A=1100A = 1100
  • a=[3,1],b=[1,2]a = [3, 1], b = [1, 2]。初始 A=1010A = 1010。交换 A3A_3A1A_1A=1010A = 1010。交换 A1A_1A2A_2A=0110A = 0110
  • a=[3,1],b=[2,1]a = [3, 1], b = [2, 1]。初始 A=1010A = 1010。交换 A3A_3A2A_2A=1100A = 1100。交换 A1A_1A1A_1A=1100A = 1100

在上述四种结果中,有三种 A=BA = B,因此 P=3/4P = 3/4Z=3Z = 3

样例解释 2

通过 AA 的元素交换,AA 始终不会改变,所以总有 A=BA = B

样例解释 3

无论三次 AA 的元素交换如何发生,AA 中的 11 总会正确到达目标位置。

由 ChatGPT 5 翻译