给你一个长度为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%的数据,1≤t≤1000,1≤n≤2000,保证每次 T 组测试数据的 n 之和不超过 2000。
输入的第一行包含一个整数 t ,表示测试数据的组数。
对于每组数据:
第一行包含一个单一的整数 n 表示数列的长度。
第二行包含 n 个整数:p1,p2,…,pn 即数列 p。
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
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