问题2095--数列排序

2095: 数列排序

[命题人 : ]
时间限制 : 1 sec  内存限制 : 128 MB

提交

题目描述

给你一个长度为n的排列p。

排列是由n个不同的整数以任意顺序从1到n组成的数组。例如,{2,3,1,5,4}是一个排列,而{1,2,2}不是(因为2出现了两次),并且{1,3,4}也不是一个排列(因为n = 3,但数组包含4)。

对于排列p,您需要应用以下操作正好一次:

    1. 首先选择一个片段[I, r] (1 <l <r< n),片段是一个连续的数字序列{pl, pl +1, Pr-1,,Pr})并将其反转。反转一个段意味着交换数字对(pi, pr), (Pl+1, pr -1),…(Pl+i,Pr-i)  (其中l+i <r -i)

    2. 然后交换前缀和后缀:[r+ 1, n]和[1,l - 1](注意这些段可能是空的)。

例如,给定n = 5,p ={2,3,1,5,4},如果选择段[l = 2, r = 3],在反转段p ={2,1,3,5,4}后,则交换段[4,5]和[1,1]。

因此,p ={5,4,1,3,2}。可以证明,这是给定排列的最大可能结果。

您需要输出按字典顺序排列的最大排列,该排列可以通过应用所描述的操作一次获得。



提示:如果存在i (1 <= i<=n)使得当1 <= j < i且ai > bi时,aj = bj,那么从字典顺序上来说,排列A大于排列b。

对于 100%的数据,1t10001n2000,保证每次 T 组测试数据的 n 之和不超过 2000

输入

输入的第一行包含一个整数 ,表示测试数据的组数。

对于每组数据:

第一行包含一个单一的整数 表示数列的长度。

第二行包含 n 个整数:p1,p2,,pn 即数列 p

输出

对于每组测试数据,输出一行 个整数,表示经过一次操作后可以得到的字典序最大的数列。

样例输入 Copy

9
5
2 3 1 5 4
9
4 1 6 7 2 8 5 3 9
4
4 3 2 1
2
2 1
6
3 2 4 1 5 6
7
3 2 1 5 7 6 4
10
10 2 5 6 1 9 3 8 4 7
4
4 2 1 3
1
1

样例输出 Copy

5 4 1 3 2 
9 4 1 6 7 2 8 5 3 
3 2 1 4 
1 2 
6 5 3 2 4 1 
7 6 4 5 3 2 1 
9 3 8 4 7 1 10 2 5 6 
3 4 2 1 
1

提示

第一个例子在问题陈述中进行了解释。
在第二个例子中,应该选择段[l = 9, r = 9]。
在第三个例子中,应该选择段[l= 1,r = 1]。
在第四个例子中,应该选择段[l = 1, r = 2]。
在第五个例子中,应该选择段[l= 5,r = 6]。
在第六个例子中,应该选择段[l= 4,r = 4]。
在第七个示例中,应该选择段[l = 5, r = 5]。