5文字しか使わないのでパッと5進法展開が思い浮かぶと思います。
0を"a", 1を"i", 2を"u", 3を"e", 4を"o"とするとうまくいきそうですが、のケースで落ちます。
具体的には辞書順で5番目の文字列は「aa」となるのですが、5を5進法展開するとになり、1は"i"であるので「ia」となってしまいます。
一方で実は、文字列長が事前にわかっていれば上の解放を使うことができます。
ABC029 - C : Brute-force Attack
この問題の想定解は再帰関数で文字列を構築することらしいですが、別に3進展開でも解くことができます。 これを利用します。
つまり現在の方針としては、番目の文字列は文字で構成される文字列の中で何番目であるかを求めたいことになります。
これは文字列の長さを, 文字の文字列の辞書順で何番目であるかをと置くと以下のように計算できます。
先程のの「ia」ですが、これは文字の文字列の考慮をせずに5進法展開をしているのでズレてしまったわけです。
1文字で構成される文字列は全てで5文字あるので、となり、番目の文字列は2文字の文字列で一番はじめに登場する文字列であることがこれでわかります。 あとは、を普通に5進法展開をすればそれが答えです。
ただし、注意点として。つまり、文字列長が1文字であるときは上のの式が成り立たないのでそこだけ適切に場合分けしてあげることが必要です。 (n-1文字までの文字列の総数を計算するときにが登場しますが、なので、無駄にから1引かれてしまって答えがズレます。)
再帰関数を使っても解けるような気がしますが再帰の深さを考えるとやめておいたほうがいいと思います。