#ATarc110f. [ARC110F] Esoswap

[ARC110F] Esoswap

题目描述

有一个由 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~(0 \leq i \leq N-1),将 PiP_iP(i+Pi) mod NP_{(i + P_i)\ \textrm{mod}\ N} 交换。

请通过适当的操作,将 PP 排成升序。如果无法做到,请输出 -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~(1 \leq i \leq K) 行输出第 ii 次操作声明的整数 j (0jN1)j~(0 \leq j \leq N-1)

不要求操作次数最小。如果存在多种可行的操作序列,只需输出其中一种即可。

样例 1

输入

8
7 1 2 6 4 0 5 3

输出

4
6
0
3
0

说明/提示

限制条件

  • 所有输入均为整数。
  • 2N1002 \leq N \leq 100
  • PP0,1,,N10, 1, \ldots, N-1 的一个排列。

样例解释 1

以下操作序列可以将 PP 排成升序:

  • 首先声明 i=6i=6,交换 P6(=5)P_6(=5)P(6+5) mod 8=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) mod 8=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) mod 8=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) mod 8=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

由 ChatGPT 4.1 翻译