1 #include<iostream>
2 using namespace std;
3 int a[2000005],n;
4 void slove()
5 {
6 cin>>n;
7 for(int i=1;i<=n;i++){
8 cin>>a[i];
9 }
10 if(a[1]!=n&&a[n]!=n){
11 cout<<-1<<endl;
12 return;
13 }
14 int flag=0;
15 if(a[1]==n)flag=1;
16 if(flag){
17 cout<<n<<" ";
18 for(int i=n;i>=2;i--){
19 cout<<a[i]<<" ";
20 }
21 }
22 else{
23 for(int i=n-1;i>=1;i--){
24 cout<<a[i]<<" ";
25 }
26 cout<<n<<" ";
27 }
28 puts("");
29 }
30 int main()
31 {
32 int __;
33 cin>>__;
34 while(__--)slove();
35 }
36 //结论题,由题可知,每次只删除两端中较小的一端,所以在最后输出的数组中一定n在两端,否则输出-1
37 //因此,可以构造答案数组,将n在的那一端保留剩下的n-1个数倒序(每次比较由于n比其他数大,所以剩下的n-1个数会交换位置)