2007-day3-anagram-prob


アナグラム (Anagram)



時間制限 : 0.5sec / スタック制限 : 64MB / メモリ制限 : 64MB


 ある文字列の文字の順序を並べ替えて別の文字列を作ること,また,そのように並べ替えて作られた文字列をアナグラム(Anagram) と呼ぶ.この問題では,一度も並べ替えをしていない文字列も元の文字列のアナグラムと呼ぶことにする.つまり,文字列“EARTH” は文字列"HEART" のアナグラムであり,文字列"HEART" も,文字列"HEART" のアナグラムである.文字列が与えられると,多くの場合,その文字列のアナグラムは何通りも考えられる.たとえば文字列"IOI" のアナグラムは,自身を含めて辞書順に"IIO", "IOI", "OII" の3 通りがある.
 さて,君にはある文字列が与えられる.君の仕事は,与えられた文字列が,その文字列の全てのアナグラムの中で,辞書順で何番目に現れるか,を調べるプログラムを書くことである.たとえば,文字列"EARTH" は"EARTH" のアナグラムの中で28 番目であり, 文字列"HEART" は"HEART" のアナグラムの中で55 番目である.

入力

入力ファイルanagram.in から入力を読み込め.入力は1 行だけであり,この1 行はアルファベットの大文字のみからなる20 文字以下の文字列である.この文字列に対して問題の計算を行いなさい.

出力

出力は,標準出力に行うこと.入力で与えられた文字列が,その文字列のアナグラムの中で,辞書順で何番目の文字列であるかを整数で1 行に出力せよ.

入出力例

入力例1 出力例1
HEART 55

入力例2 出力例2
IOI 2

注意 オーバーフローに注意すること.


232 < 20 × 19 × … × 3 × 2 × 1 < 263

である.

コメント

名前:
コメント:
最終更新:2013年02月23日 22:20