| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 0.5 초 | 1024 MB | 37 | 29 | 27 | 79.412% |
ある文字列の文字の順序を並べ替えて別の文字列を作ること,また,そのように並べ替えて 作られた文字列をアナグラム (Anagram) と呼ぶ.この問題では,一度も並べ替えをしていな い文字列も元の文字列のアナグラムと呼ぶことにする.つまり,文字列 “EARTH” は文字列 “HEART” のアナグラムであり,文字列 “HEART” も,文字列 “HEART” のアナグラムである.
文字列が与えられると,多くの場合,その文字列のアナグラムは何通りも考えられる.たとえ ば文字列 “IOI” のアナグラムは,自身を含めて辞書順に “IIO”, “IOI”, “OII” の 3 通りがある.
さて,君にはある文字列が与えられる.君の仕事は,与えられた文字列が,その文字列の全 てのアナグラムの中で,辞書順で何番目に現れるか,を調べるプログラムを書くことである.
たとえば,文字列 “EARTH” は “EARTH” のアナグラムの中で 28 番目であり, 文字列 “HEART” は “HEART” のアナグラムの中で 55 番目である.
入力は 1 行だけであり,この 1 行は アルファベットの大文字のみからなる 20 文字以下の文字列である.この文字列に対して問題の 計算を行いなさい.
出力は,標準出力に行うこと.入力で与えられた文字列が,その文字列のアナグラ ムの中で,辞書順で何番目の文字列であるかを整数で 1 行に出力せよ.
HEART
55
IOI
2
注意 オーバーフローに注意すること.
232 < 20 × 19 × · · · × 3 × 2 × 1 < 263
である.