问题描述
给定一个包含 N 个元素的数组 A,其中 A 是 (1,2,...,N) 的排列。
你可以执行以下操作 0 到 10,000 次,使数组 A 变为 (1,2,...,N)。
- 选择一个整数 i (1leqileqN),将子数组 A\[1,\\ i-1\] 的元素逆序,并将子数组 A\[i+1,\\ N\] 的元素逆序。
这里的子数组 A\[l,\\ r\] 是指数组 A 中位置 l,l+1,...,r 的元素。
判断是否可以将数组 A 排序为 (1,2,...,N)。如果可以,请输出一种操作的示例。
约束条件
- 1leqNleq3,000
- A 是 (1,2,...,N) 的排列。
输入格式
从标准输入读取输入的格式如下:
N
A1 A2 ... AN
第一行包含一个整数 N。
第二行包含 N 个整数 A1,A2,...,AN,表示数组 A。
输出格式
如果无法将数组 A 排序为 (1,2,...,N),则只需在一行中输出 -1
。
如果可以排序,则按以下方式输出示例操作:
- 第一行输出一个整数 M,表示操作的次数。
- 接下来的 M 行中,第 k 行输出第 k 次操作选择的整数 i (1leqileqN)。
示例输入 1
5
5 1 4 2 3
示例输出 1
2
3
1
例如,可以执行以下 2 次操作:
- 选择 i=3,将数组变为 (5,1,4,2,3) → (1,5,4,3,2)
- 选择 i=1,将数组变为 (1,5,4,3,2) → (1,2,3,4,5)
示例输入 2
2
2 1
示例输出 2
-1
示例输入 3
3
1 2 3
示例输出 3
0