#icpc2015summerday2i. [icpc2015summer_day2_i]ツインリバース

[icpc2015summer_day2_i]ツインリバース

问题描述

给定一个包含 NN 个元素的数组 AA,其中 AA(1,2,...,N)(1,\\ 2,\\ ...,\\ N) 的排列。

你可以执行以下操作 0010,00010,000 次,使数组 AA 变为 (1,2,...,N)(1,\\ 2,\\ ...,\\ N)

  • 选择一个整数 ii (1leqileqN1\\leq i\\leq N),将子数组 A\[1,\\ i-1\] 的元素逆序,并将子数组 A\[i+1,\\ N\] 的元素逆序。

这里的子数组 A\[l,\\ r\] 是指数组 AA 中位置 l,l+1,...,rl,\\ l+1,\\ ...,\\ r 的元素。

判断是否可以将数组 AA 排序为 (1,2,...,N)(1,\\ 2,\\ ...,\\ N)。如果可以,请输出一种操作的示例。


约束条件

  • 1leqNleq3,0001\\leq N\\leq 3,000
  • AA(1,2,...,N)(1,\\ 2,\\ ...,\\ N) 的排列。

输入格式

从标准输入读取输入的格式如下:

NN
A1A_1 A2A_2 ...... ANA_N

第一行包含一个整数 NN
第二行包含 NN 个整数 A1,A2,...,ANA_1, A_2, ..., A_N,表示数组 AA

输出格式

如果无法将数组 AA 排序为 (1,2,...,N)(1,\\ 2,\\ ...,\\ N),则只需在一行中输出 -1

如果可以排序,则按以下方式输出示例操作:

  • 第一行输出一个整数 MM,表示操作的次数。
  • 接下来的 MM 行中,第 kk 行输出第 kk 次操作选择的整数 ii (1leqileqN1\\leq i\\leq N)。

示例输入 1

5
5 1 4 2 3

示例输出 1

2
3
1

例如,可以执行以下 22 次操作:

  • 选择 i=3i=3,将数组变为 (5,1,4,2,3)(5,\\ 1,\\ 4,\\ 2,\\ 3)(1,5,4,3,2)(1,\\ 5,\\ 4,\\ 3,\\ 2)
  • 选择 i=1i=1,将数组变为 (1,5,4,3,2)(1,\\ 5,\\ 4,\\ 3,\\ 2)(1,2,3,4,5)(1,\\ 2,\\ 3,\\ 4,\\ 5)

示例输入 2

2
2 1

示例输出 2

-1

示例输入 3

3
1 2 3

示例输出 3

0