C - 仲良し文字列 Editorial /

Time Limit: 2 sec / Memory Limit: 64 MB

問題文

(21:13 追記) |A|=|B|=1のケースがテスト中に一つ含まれていましたので、リジャッジを行います。なお、このケースでNOを出力するプログラムに影響はありません。

文字列 A の文字をちょうど 3 回スワップすることにより、文字列 B に変換できるとき、二つの文字列 A, B を、仲良し文字列と呼ぶことにします。

スワップとは、文字列に含まれる 2 つの文字を、入れ替えることを指します。 例えば、abcという文字列であれば、acを入れ替えて、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

まず、文字列 Aabcdefafをスワップし、fbcdeaとします。

次に、beをスワップし、fecdbaとします。

最後に、cdをスワップし、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

Source Name

Code Formula 2014 予選B