AT_arc110_f [ARC110F] Esoswap

Description

[problemUrl]: https://atcoder.jp/contests/arc110/tasks/arc110_f $ 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` を出力してください。

Input Format

入力は以下の形式で標準入力から与えられる。 > $ N $ $ P_0 $ $ P_1 $ $ \ldots $ $ P_{N\ -\ 1} $

Output Format

$ 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\ \times\ 10^5 $ 回以下の操作で $ P $ を昇順に並び替える操作列が複数存在する場合、どれを出力しても構わない。

Explanation/Hint

### 制約 - 入力は全て整数 - $ 2\ \leq\ N\ \leq\ 100 $ - $ P $ は $ 0,\ 1,\ \ldots,\ N\ -\ 1 $ を並び替えた数列 ### Sample Explanation 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 $ になる