Time Limit: 2 sec / Memory Limit: 64 MB
問題文
(21:13 追記) |A|=|B|=1のケースがテスト中に一つ含まれていましたので、リジャッジを行います。なお、このケースでNO
を出力するプログラムに影響はありません。
文字列 A の文字をちょうど 3 回スワップすることにより、文字列 B に変換できるとき、二つの文字列 A, B を、仲良し文字列と呼ぶことにします。
スワップとは、文字列に含まれる 2 つの文字を、入れ替えることを指します。
例えば、abc
という文字列であれば、a
とc
を入れ替えて、cba
のように変換することが出来ます。
aa
のような文字列に対し、 1 文字目のa
と、 2 文字目のa
を入れ替えることは許されていますが、同じ場所の文字を指定することはできません。
文字列 A, B が与えられるので、仲良し文字列になっているかどうかを判定しなさい。
入力
入力は以下の形式で標準入力から与えられる。
A B
- 1 行目には、文字列 A (2 ≦ |A|≦ 1000) が与えられる。
- 2 行目には、文字列 B (|B| = |A|) が与えられる。
- A, B 共に、小文字アルファベットのみで構成されていることが保障されている。
出力
与えられた 2 つの文字列が、仲良し文字列であればYES
、そうでなければNO
を出力せよ。
出力の末尾には改行をいれること。
入力例1
abcdef fedcba
出力例1
YES
まず、文字列 A のabcdef
のa
とf
をスワップし、fbcdea
とします。
次に、b
とe
をスワップし、fecdba
とします。
最後に、c
とd
をスワップし、fedcba
とすると、文字列 B と一致します。
よって、この 2 つの文字列は、仲良し文字列となるため、YES
と出力します。
入力例2
abababab babababa
出力例2
NO
使っている文字数が同じでも、 3 回のスワップでは同じ文字列にできないパターンも存在します。
入力例3
nt nt
出力例3
NO
スワップの仕方が 1 通りしかなく、 3 回のスワップを繰り返すと、tn
になってしまいます。
よって、同じ 2 つの文字列ですが、仲良し文字列ではありません。
入力例4
pqqq pqqq
出力例4
YES
まず、 1 番目の文字と 2 番目の文字を入れ替え、qpqq
とします。
次に、 3 番目の文字と 4 番目の文字を入れ替え、qpqq
とします。この際、同じ文字を選んでいますが、場所が違うので問題ありません。
最後に、1番目の文字と、2番目の文字を入れ替え、pqqq
とします。
入力例5
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvxyzw abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
出力例5
YES
長い文字列が与えらえれることがあることにも注意してください。
入力例6
abcdef ghijkl
出力例6
NO