#arc110f. [arc110_f]Esoswap

[arc110_f]Esoswap

题目描述

我们有一个排列 P=P0,P1,ldots,PN1P = P_0, P_1, \\ldots, P_{N - 1},其中 PP 是由 0,1,ldots,N10, 1, \\ldots, N - 1 组成的数组。

你最多可以对 PP 进行 2times1052 \\times 10^5 次以下操作:

  • 宣布一个整数 i (0leqileqN1)i ~ (0 \\leq i \\leq N - 1)。交换 PiP_iP(i+Pi)textrmmodNP_{(i + P_i) \\textrm{ mod } N}

你的任务是使用这些操作对 PP 进行升序排序。如果无法排序,输出 -1

约束条件

  • 输入中的所有值都是整数。
  • 2leqNleq1002 \\leq N \\leq 100
  • PP0,1,ldots,N10, 1, \\ldots, N - 1 的一个排列。

输入

输入以以下格式从标准输入给出:

NN P0P_0 P1P_1 ldots\\ldots PN1P_{N - 1}

输出

如果最多使用 2times1052 \\times 10^5 次操作无法将 PP 排序为升序,输出 -1

否则,输出 K+1K + 1 行表示排序 PP 的操作序列,其中 KK 是已完成的操作次数,按照以下方式:

  • 第一行应包含整数 KK
  • (1+i)(1 + i)(1leqileqK)(1 \\leq i \\leq K) 应包含第 ii 次操作宣布的整数 j (0leqjleqN1)j ~ (0 \\leq j \\leq N - 1)

你不需要最小化操作次数。如果存在多个这样的操作序列,每一个都将被接受。


示例输入 1

8
7 1 2 6 4 0 5 3

示例输出 1

4
6
0
3
0

以下是对 PP 进行升序排序的操作序列:

  • 首先,宣布 i=6i = 6。我们交换 P6(=5)P_6 (= 5)P(6+5)textrmmod8=P3(=6)P_{(6 + 5) \\textrm{ mod } 8} = P_3 (= 6),将 PP 变为 7,1,2,5,4,0,6,37, 1, 2, 5, 4, 0, 6, 3

  • 然后,宣布 i=0i = 0。我们交换 P0(=7)P_0 (= 7)P(0+7)textrmmod8=P7(=3)P_{(0 + 7) \\textrm{ mod } 8} = P_7 (= 3),将 PP 变为 3,1,2,5,4,0,6,73, 1, 2, 5, 4, 0, 6, 7

  • 然后,宣布 i=3i = 3。我们交换 P3(=5)P_3 (= 5)P(3+5)textrmmod8=P0(=3)P_{(3 + 5) \\textrm{ mod } 8} = P_0 (= 3),将 PP 变为 5,1,2,3,4,0,6,75, 1, 2, 3, 4, 0, 6, 7

  • 最后,宣布 i=0i = 0。我们交换 P0(=5)P_0 (= 5)P(0+5)textrmmod8=P5(=0)P_{(0 + 5) \\textrm{ mod } 8} = P_5 (= 0),将 PP 变为 0,1,2,3,4,5,6,70, 1, 2, 3, 4, 5, 6, 7