順列はサイクルのセットに分解できるというよく知られた定理があります。あなたの仕事は、できる限り短いプログラムを書くことです。
入力:
2行。最初は数値を含みN
、2番目はN
範囲内の異なる整数を含みます[0,N-1]
スペースで区切られれます。これらの整数は、N
要素の順列を表します。
出力:
順列の各サイクルに1行。各行は、スペースで区切られた整数のサイクル順のリストである必要があります。
サイクルは任意の順序で出力でき、各サイクルは任意の位置から出力できます。
例1:
8
2 3 4 5 6 7 0 1
この入力は、順列0-> 2、1-> 3、2-> 4、3-> 5、4-> 6、5-> 7、6-> 0、7-> 1をエンコードします。これは、次のようなサイクルに分解されます。
0 2 4 6
1 3 5 7
同様に有効な出力は
5 7 1 3
2 4 6 0
例2:
8
0 1 3 4 5 6 7 2
有効な出力:
0
1
4 5 6 7 2 3
>C.