B - Password Editorial /

Time Limit: 2 sec / Memory Limit: 64 MB

問題文

セキュリティに興味がある高橋君は、デジタルアーツ株式会社に就職したい青年です。
そこで、高橋君は自分が運営するサービスであるAtCoderのセキュリティについて見なおしてみることにしました。

現在AtCoderのシステムでは、パスワードは 1 文字以上 20 文字以下の英小文字のみとしています。
そして、文字列 s に対してハッシュ値( hash(s) )を求める以下の式があり、パスワードと入力した文字列に対して、それぞれこの式で算出したハッシュ値が一致すると、入力した文字列は正しいとみなします。

hash(s) = Num(c_1) + Num(c_2) + ... + Num(c_{N}) (c_i は文字列 si 番目の文字を意味する)

なお、上記の式の関数 Num() とは英小文字を数字に変換する関数で、Num(a) = 1, Num(b) = 2, ...., Num(z) = 26 というように、a から z に対して順に 1 から 26 までの数字を返します。

高橋君は、このシステムではパスワードと違う文字列でも簡単にハッシュ値が一致してしまうことに気づきました。
例えば、文字列 abc のハッシュ値は、1+2+3=6 となりますが、文字列 bbb のハッシュ値も 2+2+2=6 ですし、f6 になってしまいます。

高橋君は、現在使っているパスワードに対してどのような文字列が正しいパスワードとして認識されてしまうか知りたいです。
正しいパスワード以外で条件を満たすものを 1 つ出力しなさい。
条件を満たすものが複数ある場合は、どの文字列を出力しても構いません。
もし条件を満たすパスワードが存在しない場合は NO と出力しなさい。
なお、AtCoderのシステムで入力できるパスワードは 1 文字以上 20 文字以下の英小文字のみなので、 答えとして出力する文字列もその条件をみたします。

入力

入力は以下の形式で標準入力から与えられる。
c_1c_2‥‥c_N
  • 入力には正しいパスワードを表す長さ N(1≦N≦20) の文字列が 1 行で与えられる。
    • 正しいパスワードの i 番目の文字を表す c_i は英小文字 (a-z) である。

出力

与えられた正しいパスワードを表す文字列と等しいハッシュ値になる英小文字 1 文字以上 20 文字以下の文字列を、正しいパスワード以外のいずれか 1 つ出力せよ。
また、そのような文字列が存在しない場合は NO と出力せよ。
なお、出力は 1 行のみとし、最後には改行を出力せよ。

入力例 1

abc

出力例 1

bbb
  • 問題文内に示しているように、ハッシュ値が 6 になります。
  • 他にも faaaaaacc でも構いません。

入力例 2

zzzzzzzzzzzzzzzzzzzz

出力例 2

NO
  • 条件を満たす文字列は正しいパスワードしか存在しません。

入力例 3

abcdef

出力例 3

fedcba
  • ハッシュ値は 21 になります。

入力例 4

k

出力例 4

bbbbba

入力例 5

aa

出力例 5

b
  • ハッシュ値が 2 になる文字列は正しいパスワード以外に、b しかありません。

Source Name

DigitalArts 2012