/
実行時間制限: 2 sec / メモリ制限: 64 MiB
問題文
(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