atcoder#ARC110F. [ARC110F] Esoswap

[ARC110F] Esoswap

配点 : 900900

問題文

0,1,,N10, 1, \ldots, N - 1 を並び替えた数列 P=P0,P1,,PN1P = P_0, P_1, \ldots, P_{N - 1} があります。

あなたは PP に対して、以下の操作を最大 2×1052 \times 10^5 回まで行うことができます。

  • 整数 i(0iN1)i \sim (0 \leq i \leq N - 1) を宣言する。PiP_iP(i+Pi) mod NP_{(i + P_i) \textrm{ mod } N} を入れ替える

適切に操作を行うことで、PP を昇順に並び替えてください。もしそれが不可能な場合、-1 を出力してください。

制約

  • 入力は全て整数
  • 2N1002 \leq N \leq 100
  • PP0,1,,N10, 1, \ldots, N - 1 を並び替えた数列

入力

入力は以下の形式で標準入力から与えられる。

NN

P0P_0 P1P_1 \ldots PN1P_{N - 1}

出力

2×1052 \times 10^5 回以下の操作で PP を昇順に並び替えることが不可能な場合、-1 を出力せよ。

2×1052 \times 10^5 回以下の操作で PP を昇順に並び替えることが可能な場合、KK 回操作を行うとして、以下の形式で K+1K + 1 行出力せよ。

  • 11 行目は整数 KK
  • 1+i(1iK)1 + i \sim (1 \leq i \leq K) 行目は、ii 回目の操作で宣言する整数 j(0jN1)j \sim (0 \leq j \leq N - 1)

操作回数を最小化する必要はない。 また、2×1052 \times 10^5 回以下の操作で PP を昇順に並び替える操作列が複数存在する場合、どれを出力しても構わない。

8
7 1 2 6 4 0 5 3
4
6
0
3
0

この操作列は、以下のように PP を昇順に並び替えます。

  • まず ii として 66 を宣言し、P6(=5)P_6 (= 5)P(6+5) mod 8=P3(=6)P_{(6 + 5) \textrm{ mod } 8} = P_3 (= 6) を入れ替える。PP7,1,2,5,4,0,6,37, 1, 2, 5, 4, 0, 6, 3 になる
  • 次に ii として 00 を宣言し、P0(=7)P_0 (= 7)P(0+7) mod 8=P7(=3)P_{(0 + 7) \textrm{ mod } 8} = P_7 (= 3) を入れ替える。PP3,1,2,5,4,0,6,73, 1, 2, 5, 4, 0, 6, 7 になる
  • 次に ii として 33 を宣言し、P3(=5)P_3 (= 5)P(3+5) mod 8=P0(=3)P_{(3 + 5) \textrm{ mod } 8} = P_0 (= 3) を入れ替える。PP5,1,2,3,4,0,6,75, 1, 2, 3, 4, 0, 6, 7 になる
  • 次に ii として 00 を宣言し、P0(=5)P_0 (= 5)P(0+5) mod 8=P5(=0)P_{(0 + 5) \textrm{ mod } 8} = P_5 (= 0) を入れ替える。PP0,1,2,3,4,5,6,70, 1, 2, 3, 4, 5, 6, 7 になる