序列重排(arrange)
给定一个长度为 的正整数序列 。
定义一次操作为:
- 选择当前序列中的一个位置 ,保持第 个数不动,将它左侧的所有数整体翻转,同时将它右侧的所有数整体翻转。
也就是说,若当前序列为:
则选择位置 进行一次操作后,序列会变为:
你需要在不超过 次操作内,使序列 单调不降,或报告无法完成。
样例 1 输入
2
6
1 4 3 5 3 2
6
6 5 4 3 2 1
样例 1 输出
5
5 3 6 2 4
-1
样例 1 解释
对于第一组测试数据,初始序列为:
依次选择位置:
可以将序列变为:
因此这是一组合法输出。
对于第二组测试数据,可以证明不存在合法方案,因此输出 。
样例 2
见附加文件中的 arrange2.in 和 arrange2.ans。
该样例满足测试点 的限制。
样例 3
见附加文件中的 arrange3.in 和 arrange3.ans。
该样例满足测试点 的限制。
样例 4
见附加文件中的 arrange4.in 和 arrange4.ans。
该样例满足测试点 的限制。
样例 5
见附加文件中的 arrange5.in 和 arrange5.ans。
该样例满足测试点 的限制。
输入格式
本题有多组测试数据。
第一行包含一个正整数 ,表示测试数据组数。
对于每组测试数据:
- 第一行包含一个正整数 。
- 第二行包含 个正整数 。
输出格式
对于每组测试数据,输出一行或两行。
若不可能在 次操作内完成排序,输出一行一个整数 。
否则:
- 第一行输出一个非负整数 ,表示操作次数。
- 第二行输出 个正整数,表示每次操作选择的位置。
若有多种合法方案,输出任意一种即可。
提示
对于所有测试数据,保证:
- ;
- ;
- 。
| 测试点编号 | |
|---|---|
下发大样例
- arrange1⬇ 输入 (30B)⬇ 输出 (5B)
- arrange2⬇ 输入 (217B)⬇ 输出 (10B)
- arrange3⬇ 输入 (1.1KB)⬇ 输出 (11B)