Time Limit: 2.5 sec / Memory Limit: 1024 MB
配点: 100 点
問題文
長さ N の 0
と 1
からなる文字列 S, T が与えられます。
以下の操作を考えます。
- 1 \leq x \leq N となる整数 x を選び、文字列 S = S_1\ldots S_N を S_1\ldots S_x と S_{x+1}\ldots S_N に分け、それぞれ巡回右シフトをしてくっつける
ただし、文字列 U = U_1\ldots U_M の巡回右シフトとは U_1\ldots U_{M-1}U_M を U_MU_1\ldots U_{M-1} に変更することを意味します。また、x=N の時は文字列 S 全体を巡回右シフトします。 例えば、文字列 S=01001 に対して x=3 として操作を行うと、文字列はまず 010 と 01 にわけられ、それぞれを巡回右シフトすると 001 と 10 になるため、操作の結果として得られる文字列は 00110 となります。
この操作を文字列 S に対して任意回数行うことで、文字列 T と一致させることが出来るか判定してください。
出来ない場合は MuriyarokonnNaN
を 1 行に出力、
出来る場合は最小の操作回数を 1 行に出力してください。
制約
- N は 1 \leq N \leq 10^{5} を満たす整数
- S と T は
0
と1
からなる文字列 - \lvert S \rvert = \lvert T \rvert = N
- S に含まれる
0
の数と T に含まれる0
の数は等しい - S に含まれる
1
の数と T に含まれる1
の数は等しい
入力
入力は以下の形式で標準入力から与えられる。
N S T
出力
文字列 S に対して操作を任意回数行うことで文字列 T と一致させることが出来る場合は最小の操作回数を、出来ない場合は MuriyarokonnNaN
を、それぞれ 1 行に出力せよ。
入力例 1
6 010101 010110
出力例 1
3
以下のような順番で操作を行うことで、文字列 S を文字列 T に一致させることが出来ます。
- x=1 として操作を行う
- x=5 として操作を行う
- x=6 として操作を行う
この時、文字列 S は操作によって 010101 \to 011010 \to 101100 \to 010110 と変化します。
入力例 2
18 111101101001101001 111101101001101001
出力例 2
0
操作をしなくてもすでに一致しています。
入力例 3
18 011110100101000100 000110010011100110
出力例 3
8