#agc019e. [agc019_e]Shuffle and Swap
[agc019_e]Shuffle and Swap
問題文
と からなる同じ長さの二つの文字列 と があります。 に含まれる の個数は等しいです。
あなたは次のアルゴリズムによって を変化させることにしました。
- , , ..., を、 で が出現する位置の添字とする。
- , , ..., を、 で が出現する位置の添字とする。
- の要素をそれぞれ無作為に並び替える。これらの無作為な並び替えは一様かつ独立である。
- から までの各 に対して、順に と の値を入れ替える。
この手順のあと、文字列 が一致する確率を とします。
さらに、 とします。明らかに、 は整数です。
を で割った余りを求めてください。
制約
- は と からなる。
- に含まれる の個数は等しい。
- には が少なくとも一つ含まれる。
部分点
- を満たすデータセットに正解すると、 点が与えられる。
入力
入力は以下の形式で標準入力から与えられる。
出力
を で割った余りを出力せよ。
入力例 1
1010
1100
出力例 1
3
最初の二つのステップで、a = \[1, 3\], b = \[1, 2\] となります。 の要素を無作為に並び替えたあとの結果としてありうるものは次の つです。
- a = \[1, 3\], b = \[1, 2\]。はじめ 。 と の入れ替え後 。 と の入れ替え後 。
- a = \[1, 3\], b = \[2, 1\]。はじめ 。 と の入れ替え後 。 と の入れ替え後 。
- a = \[3, 1\], b = \[1, 2\]。はじめ 。 と の入れ替え後 。 と の入れ替え後 。
- a = \[3, 1\], b = \[2, 1\]。はじめ 。 と の入れ替え後 。 と の入れ替え後 。
この つの結果のうち、 つで となっています。よって、 / であり、 となります。
入力例 2
01001
01001
出力例 2
4
の要素の入れ替えによって が変化することはなく、したがって必ず となります。
入力例 3
101010
010101
出力例 3
36
三回の の要素の入れ替えがどのように起こっても、 に含まれる は適切な位置に移動します。
入力例 4
1101011011110
0111101011101
出力例 4
932171449