AT_arc110_f [ARC110F] Esoswap

题目描述

有一个由 $0, 1, \ldots, N-1$ 组成并被打乱顺序的数列 $P = P_0, P_1, \ldots, P_{N-1}$。 你可以对 $P$ 最多进行 $2 \times 10^5$ 次如下操作: - 声明一个整数 $i~(0 \leq i \leq N-1)$,将 $P_i$ 与 $P_{(i + P_i)\ \textrm{mod}\ N}$ 交换。 请通过适当的操作,将 $P$ 排成升序。如果无法做到,请输出 `-1`。

输入格式

输入通过标准输入按以下格式给出: > $N$ $P_0$ $P_1$ $\ldots$ $P_{N-1}$

输出格式

如果无法在 $2 \times 10^5$ 次操作内将 $P$ 排成升序,请输出 `-1`。 如果可以在 $2 \times 10^5$ 次操作内将 $P$ 排成升序,假设共操作 $K$ 次,请按以下格式输出 $K+1$ 行: - 第 $1$ 行输出整数 $K$。 - 第 $1+i~(1 \leq i \leq K)$ 行输出第 $i$ 次操作声明的整数 $j~(0 \leq j \leq N-1)$。 不要求操作次数最小。如果存在多种可行的操作序列,只需输出其中一种即可。

说明/提示

### 限制条件 - 所有输入均为整数。 - $2 \leq N \leq 100$。 - $P$ 是 $0, 1, \ldots, N-1$ 的一个排列。 ### 样例解释 1 以下操作序列可以将 $P$ 排成升序: - 首先声明 $i=6$,交换 $P_6(=5)$ 和 $P_{(6+5)\ \textrm{mod}\ 8}=P_3(=6)$,此时 $P$ 变为 $7, 1, 2, 5, 4, 0, 6, 3$。 - 然后声明 $i=0$,交换 $P_0(=7)$ 和 $P_{(0+7)\ \textrm{mod}\ 8}=P_7(=3)$,此时 $P$ 变为 $3, 1, 2, 5, 4, 0, 6, 7$。 - 然后声明 $i=3$,交换 $P_3(=5)$ 和 $P_{(3+5)\ \textrm{mod}\ 8}=P_0(=3)$,此时 $P$ 变为 $5, 1, 2, 3, 4, 0, 6, 7$。 - 然后声明 $i=0$,交换 $P_0(=5)$ 和 $P_{(0+5)\ \textrm{mod}\ 8}=P_5(=0)$,此时 $P$ 变为 $0, 1, 2, 3, 4, 5, 6, 7$。 由 ChatGPT 4.1 翻译