atcoder#AGC019E. [AGC019E] Shuffle and Swap

[AGC019E] Shuffle and Swap

分数 : 17001700

问题陈述

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

您决定使用以下算法变换 AA

  • a1,a2,...,aka_1, a_2, ..., a_kAA11 的索引。
  • b1,b2,...,bkb_1, b_2, ..., b_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
  • AABB0011 组成。
  • AABB 中的 11 的数量相同。
  • AABB 至少包含一个 11

部分得分

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

输入

输入来自标准输入,格式如下:

AA

BB

输出

打印 ZZ998244353998244353 的模的值。

1010
1100
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。在 swap(A1A_1, A1A_1) 之后,A=1010A = 1010。在 swap(A3A_3, A2A_2) 之后,A=1100A = 1100
  • a=[1,3]a = [1, 3]b=[2,1]b = [2, 1]。最初,A=1010A = 1010。在 swap(A1A_1, A2A_2) 之后,A=0110A = 0110。在 swap(A3A_3, A1A_1) 之后,A=1100A = 1100
  • a=[3,1]a = [3, 1]b=[1,2]b = [1, 2]。最初,A=1010A = 1010。在 swap(A3A_3, A1A_1) 之后,A=1010A = 1010。在 swap(A1A_1, A2A_2) 之后,A=0110A = 0110
  • a=[3,1]a = [3, 1]b=[2,1]b = [2, 1]。最初,A=1010A = 1010。在 swap(A3A_3, A2A_2) 之后,A=1100A = 1100。在 swap(A1A_1, A1A_1) 之后,A=1100A = 1100

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

01001
01001
4

没有任何交换会改变 AA,所以我们始终有 A=BA = B

101010
010101
36

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

1101011011110
0111101011101
932171449