题目描述
我们有一个排列 P=P0,P1,ldots,PN−1,其中 P 是由 0,1,ldots,N−1 组成的数组。
你最多可以对 P 进行 2times105 次以下操作:
- 宣布一个整数 i (0leqileqN−1)。交换 Pi 和 P(i+Pi)textrmmodN。
你的任务是使用这些操作对 P 进行升序排序。如果无法排序,输出 -1
。
约束条件
- 输入中的所有值都是整数。
- 2leqNleq100
- P 是 0,1,ldots,N−1 的一个排列。
输入
输入以以下格式从标准输入给出:
N
P0 P1 ldots PN−1
输出
如果最多使用 2times105 次操作无法将 P 排序为升序,输出 -1
。
否则,输出 K+1 行表示排序 P 的操作序列,其中 K 是已完成的操作次数,按照以下方式:
- 第一行应包含整数 K;
- 第 (1+i) 行 (1leqileqK) 应包含第 i 次操作宣布的整数 j (0leqjleqN−1)。
你不需要最小化操作次数。如果存在多个这样的操作序列,每一个都将被接受。
示例输入 1
8
7 1 2 6 4 0 5 3
示例输出 1
4
6
0
3
0
以下是对 P 进行升序排序的操作序列:
-
首先,宣布 i=6。我们交换 P6(=5) 和 P(6+5)textrmmod8=P3(=6),将 P 变为 7,1,2,5,4,0,6,3。
-
然后,宣布 i=0。我们交换 P0(=7) 和 P(0+7)textrmmod8=P7(=3),将 P 变为 3,1,2,5,4,0,6,7。
-
然后,宣布 i=3。我们交换 P3(=5) 和 P(3+5)textrmmod8=P0(=3),将 P 变为 5,1,2,3,4,0,6,7。
-
最后,宣布 i=0。我们交换 P0(=5) 和 P(0+5)textrmmod8=P5(=0),将 P 变为 0,1,2,3,4,5,6,7。