#agc019e. [agc019_e]Shuffle and Swap

[agc019_e]Shuffle and Swap

问题陈述

你有两个字符串 A=A1A2...AnA = A_1 A_2 ... A_nB=B1B2...BnB = B_1 B_2 ... B_n,它们具有相同的长度,并且由字符 0011 组成。AABB 中的 11 的数量相等。

你决定使用以下算法来转换 AA

  • a1a_1, a2a_2, ..., aka_kAA11 的索引。
  • b1b_1, b2b_2, ..., bkb_kBB11 的索引。
  • 分别独立且均匀地选取 aabb 的随机排列。
  • 对于 ii11kk,按顺序交换 AaiA_{a_i}AbiA_{b_i}

PP 是在上述过程后字符串 AABB 变得相等的概率。

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

ZZ998244353998244353 取模的结果。

约束条件

  • 1A=B10,0001 \leq |A| = |B| \leq 10,000
  • AABB 由字符 0011 组成。
  • AABB 中包含的 11 的数量相等。
  • AABB 至少包含一个 11

部分得分

  • 通过满足 1A=B5001 \leq |A| = |B| \leq 500 的测试集将获得 12001200 分。

输入

输入以以下格式从标准输入给出:

AA BB

输出

输出 ZZ998244353998244353 取模的结果。


示例输入 1

1010
1100

示例输出 1

3

经过前两步后,a=[1,3]a = [1, 3]b=[1,2]b = [1, 2]。在重新排列 aabb 后,有 44 种可能的情况:

  • a=[1,3]a = [1, 3]b=[1,2]b = [1, 2]。初始状态下,A=1010A = 1010。在交换(A1A_1, A1A_1)后,A=1010A = 1010。在交换(A3A_3, A2A_2)后,A=1100A = 1100
  • a=[1,3]a = [1, 3]b=[2,1]b = [2, 1]。初始状态下,A=1010A = 1010。在交换(A1A_1, A2A_2)后,A=0110A = 0110。在交换(A3A_3, A1A_1)后,A=1100A = 1100
  • a=[3,1]a = [3, 1]b=[1,2]b = [1, 2]。初始状态下,A=1010A = 1010。在交换(A3A_3, A1A_1)后,A=1010A = 1010。在交换(A1A_1, A2A_2)后,A=0110A = 0110
  • a=[3,1]a = [3, 1]b=[2,1]b = [2, 1]。初始状态下,A=1010A = 1010。在交换(A3A_3, A2A_2)后,A=1100A = 1100。在交换(A1A_1, A1A_1)后,A=1100A = 1100

44 种情况中,有 33 种结果为 A=BA = B。因此,P=3/4P = 3 / 4Z=3Z = 3


示例输入 2

01001
01001

示例输出 2

4

没有任何交换能改变 AA,所以我们总是有 A=BA = B


示例输入 3

101010
010101

示例输出 3

36

每一种可能的三次交换都能将 AA 中的 11 放置到正确的位置。


示例输入 4

1101011011110
0111101011101

示例输出 4

932171449