問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
置換の積および二乗の計算ができたので、繰り返し二乗法を用いて、置換の累乗を計算してみましょう。
繰り返し二乗法の場合には result = 1 として初期化しましたが、置換の場合には、次のように初期化することでうまく計算できます。
・ result = (1, 2, ..., n) とする。
・ i = 1 から k まで、以下の処理を繰り返す。(k は最大のビット数とします。)
1. n の下から i 番目のビットが 1 であるならば、result <- result・x とする。
2. x <- x・x とする。
n と k と a_1, a_2, ..., a_n が与えられるので、a の k 乗 a^k を計算してください。
n k
a_1 a_2 ... a_n
合計 n 行出力してください。
i 行目には、{a^k}_i を出力してください。
また、末尾に改行を入れ、余計な文字を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ 入力はすべて整数
・ 1 ≦ n ≦ 10000 = 10^4
・ 0 ≦ k < 2^20
・ 1 ≦ a_i ≦ n (1 ≦ i ≦ n)
・ a は長さ n の置換
3 2
3 2 1
1 2 3
5 5
3 1 2 5 4
2 3 1 5 4