CF1558C Bottom-Tier Reversals

题目描述

你有一个排列:一个由 $1$ 到 $n$ 的互不相同整数构成的数组 $a = [a_1, a_2, \ldots, a_n]$。排列的长度 $n$ 是奇数。 你需要将该排列按升序排序。 每一步,你可以选择排列的任意一个奇数长度前缀并将其翻转。具体来说,如果 $a = [a_1, a_2, \ldots, a_n]$,你可以选择 $1$ 到 $n$ 之间的任意奇数 $p$,然后将 $a$ 变为 $[a_p, a_{p-1}, \ldots, a_1, a_{p+1}, a_{p+2}, \ldots, a_n]$。 请找出一种方法,在不超过 $\frac{5n}{2}$ 次上述翻转操作内将 $a$ 排序,或者判断是否无法做到。翻转次数不必最小。

输入格式

每组测试数据包含多个测试用例。第一行包含测试用例数 $t$($1 \le t \le 100$)。每个测试用例的描述如下。 每个测试用例的第一行包含一个整数 $n$($3 \le n \le 2021$,$n$ 为奇数),表示排列的长度。 第二行包含 $n$ 个互不相同的整数 $a_1, a_2, \ldots, a_n$($1 \le a_i \le n$),表示排列本身。 保证所有测试用例中 $n$ 的总和不超过 $2021$。

输出格式

对于每个测试用例,如果无法在不超过 $\frac{5n}{2}$ 次翻转内将给定排列排序,输出一个整数 $-1$。 否则,输出一个整数 $m$($0 \le m \le \frac{5n}{2}$),表示你操作的翻转次数,接着输出 $m$ 个整数 $p_i$($1 \le p_i \le n$,$p_i$ 为奇数),表示每次翻转的前缀长度,按操作顺序输出。 注意,$m$ 不必最小。如果有多种方案,输出任意一种均可。

说明/提示

在第一个测试用例中,排列已经有序。任意偶数次长度为 $3$ 的前缀翻转都不会改变这一事实。 在第二个测试用例中,先翻转长度为 $3$ 的前缀,排列变为 $[5, 4, 3, 2, 1]$,再翻转长度为 $5$ 的前缀,排列变为 $[1, 2, 3, 4, 5]$。 在第三个测试用例中,无法将排列排序。 由 ChatGPT 4.1 翻译