#CF1984G. 魔法技巧 II
魔法技巧 II
G. 魔法技巧 II
- 时间限制:每个测试点 秒
- 内存限制:每个测试点 兆字节
Oscar 第一个魔术 tricks 的秘密已经被揭穿了!为了仍然给 Lura 留下深刻印象,他想出了一个新主意:他仍然想要对一个排列 (它是 的一个排列)进行排序。
这一次,他选择一个整数 。他想通过以下操作若干次,将排列按非递减顺序排序:
- 选取一个长度为 的连续子数组并将其从 中移除。
- 将该连续子数组重新插入到 的任意位置(可以是最前面或最后面)。
为了尽可能引人注目,Oscar 想要选择最大的 ,使得他能够将他的排列排序。请帮助他找出最大的 ,以及一个能够将排列排序的操作序列。你不需要最小化操作次数,但允许使用的操作次数最多为 。
已知对于最大的 (使得你能通过任意次操作将排列排序),你同样可以在至多 次操作内将其排序。
输入
第一行包含一个整数 ()——测试用例的数量。
每个测试用例的第一行包含一个整数 ()——排列的长度。
每个测试用例的第二行包含一个排列 ,它是 的一个排列。
所有测试用例的 之和不超过 。
输出
对于每个测试用例,首先在新的一行输出所选的 值()。
然后,输出一个整数 ()——使用的操作次数。
接下来 行,每行输出两个整数 和 (),表示一次操作:移除从下标 开始、长度为 的子数组,并将其重新插入到下标 处。
示例
输入
3
5
5 1 2 3 4
5
2 3 5 4 1
6
1 2 3 4 5 6
输出
4
1
2 1
3
2
1 3
2 1
6
0
注
在第一个测试用例中,只需将最后四个数字移到前面即可。
在第二个测试用例中,可以证明 或 是不可能的。当 时,我们可以将前三个数字移到末尾,然后将中间三个数字移到前面,从而将排列排序。
在第三个测试用例中,排列已经有序。我们可以取 且不使用任何操作。