题目描述
有一个由 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。
输入格式
输入通过标准输入按以下格式给出:
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)。
不要求操作次数最小。如果存在多种可行的操作序列,只需输出其中一种即可。
样例 1
输入
8
7 1 2 6 4 0 5 3
输出
4
6
0
3
0
说明/提示
限制条件
- 所有输入均为整数。
- 2≤N≤100。
- P 是 0,1,…,N−1 的一个排列。
样例解释 1
以下操作序列可以将 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。
由 ChatGPT 4.1 翻译