#include <iostream>
#include "stdio.h"
using namespace std;
//将前后有序的r归并到r1
void Merge(int *r,int *r1,int s,int m,int t)
{
int i=s;
int j=m+1;
int k=s;
while(i<=m&&j<=t)
{
//将前后两个有序的序列从小到大归并到r1中
if(r[i]<=r[j]) r1[k++]=r[i++];
else r1[k++]=r[j++];
}
//补上两个序列中没有比较完全的部分
while(i<=m)
{
r1[k++]=r[i++];
}
while(j<=t)
{
r1[k++]=r[j++];
}
}
//递归归并的主要部分
void MergeSort(int *r,int *r1,int s,int t)
{
if(s==t)
r1[s]=r[s];
else
{
int r2[100];
int m=(s+t)/2;//将r[s...t]平均分成两个部分r[s...m]和r[m+1...t]
MergeSort(r,r2,s,m);//将r[s...m]归并为有序的r2[s...m]
MergeSort(r,r2,m+1,t);//将r[m+1...t]归并为有序的r2[m+1...t]
Merge(r2,r1,s,m,t);//将有序的r2[s...m]和有序的r2[m+1...t]归并到r1[s...t]
}
}
int main()
{
int n,a[100],b[100];
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
for(int j=0;j<a[i];j++)
{
cin>>b[j];
}
//这儿没有开辟新的数组
MergeSort(b,b,0,a[i]-1);
for(int j=a[i]-1;j>=1;j--)
{
printf("%d ",b[j]);
}
cout<<b[0]<<endl;
}
return 0;
}