配点 : 900 点
問題文
0,1,…,N−1 を並び替えた数列 P=P0,P1,…,PN−1 があります。
あなたは P に対して、以下の操作を最大 2×105 回まで行うことができます。
- 整数 i∼(0≤i≤N−1) を宣言する。Pi と P(i+Pi) mod N を入れ替える
適切に操作を行うことで、P を昇順に並び替えてください。もしそれが不可能な場合、-1
を出力してください。
制約
- 入力は全て整数
- 2≤N≤100
- P は 0,1,…,N−1 を並び替えた数列
入力
入力は以下の形式で標準入力から与えられる。
N
P0 P1 … PN−1
出力
2×105 回以下の操作で P を昇順に並び替えることが不可能な場合、-1
を出力せよ。
2×105 回以下の操作で P を昇順に並び替えることが可能な場合、K 回操作を行うとして、以下の形式で K+1 行出力せよ。
- 1 行目は整数 K
- 1+i∼(1≤i≤K) 行目は、i 回目の操作で宣言する整数 j∼(0≤j≤N−1)
操作回数を最小化する必要はない。
また、2×105 回以下の操作で P を昇順に並び替える操作列が複数存在する場合、どれを出力しても構わない。
8
7 1 2 6 4 0 5 3
4
6
0
3
0
この操作列は、以下のように P を昇順に並び替えます。
- まず i として 6 を宣言し、P6(=5) と P(6+5) mod 8=P3(=6) を入れ替える。P は 7,1,2,5,4,0,6,3 になる
- 次に i として 0 を宣言し、P0(=7) と P(0+7) mod 8=P7(=3) を入れ替える。P は 3,1,2,5,4,0,6,7 になる
- 次に i として 3 を宣言し、P3(=5) と P(3+5) mod 8=P0(=3) を入れ替える。P は 5,1,2,3,4,0,6,7 になる
- 次に i として 0 を宣言し、P0(=5) と P(0+5) mod 8=P5(=0) を入れ替える。P は 0,1,2,3,4,5,6,7 になる