//teja349
#include <bits/stdc++.h>
#include <vector>
#include <set>
#include <map>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <climits>
#include <utility>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <iomanip>
//setbase - cout << setbase (16); cout << 100 << endl; Prints 64
//setfill - cout << setfill ('x') << setw (5); cout << 77 << endl; prints xxx77
//setprecision - cout << setprecision (14) << f << endl; Prints x.xxxx
//cout.precision(x) cout<<fixed<<val; // prints x digits after decimal in val
using namespace std;
#define f(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) f(i,0,n)
#define fd(i,a,b) for(i=a;i>=b;i--)
#define pb push_back
#define mp make_pair
#define vi vector< int >
#define vl vector< ll >
#define ss second
#define ff first
#define ll long long
#define pii pair< int,int >
#define pll pair< ll,ll >
#define sz(a) a.size()
#define inf (1000*1000*1000+5)
#define all(a) a.begin(),a.end()
#define tri pair<int,pii>
#define vii vector<pii>
#define vll vector<pll>
#define viii vector<tri>
#define mod (1000*1000*1000+7)
#define pqueue priority_queue< int >
#define pdqueue priority_queue< int,vi ,greater< int > >
#define flush fflush(stdout)
#define primeDEN 727999983
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
template <typename T>
void printvec(vector<T>& vec){
for(int i=0;i<vec.size();i++){
cout<<vec[i]<<" ";
}
cout<<endl;
}
bool pre[510][500*500+12];
bool suff[510][500*500+12];
int a[512];
int tot=0;
int n;
int getans(int pos){
int reqd=tot/2;
int i,j=reqd;
int wow=0;
rep(i,reqd+1){
if(!pre[pos-1][i]){
continue;
}
while(j+i>reqd)
j--;
while(j>=0 && suff[pos+1][j]==0)
j--;
if(j>=0){
wow=max(j+i,wow);
}
}
return wow;
}
int fin[500*500+12],dum[500*500+12],par[500*500+12];
int b[610];
vector<vi> adj(700);
int extractans(int pos){
//cout<<pos<<endl;
//return 0;
int i,j;
rep(i,tot+10){
fin[i]=0;
dum[i]=0;
par[i]=0;
}
//return 0;
fin[0]=1;
int sumi=1;
int elem;
f(i,1,n+1){
if(i==pos)
continue;
elem=a[i];
rep(j,sumi){
if(fin[j])
dum[j]=1;
if(fin[j] && !fin[j+elem]){
dum[j+elem]=1;
par[j+elem]=elem;
}
}
sumi+=elem;
rep(j,sumi){
fin[j]=dum[j];
}
}
tot-=a[pos];
int reqd=tot/2;
fd(i,reqd,0){
if(fin[i])
break;
}
//return 0;
vi vec1;
vi vec2,vec;
while(i!=0){
vec1.pb(par[i]);
//cout<<par[i]<<endl;
i=i-par[i];
}
//return 0;
vec1.pb(a[pos]);
rep(i,600){
b[i]=0;
}
f(i,1,n+1){
b[a[i]]++;
}
rep(i,vec1.size()){
b[vec1[i]]--;
}
rep(i,600){
rep(j,b[i]){
vec2.pb(i);
}
}
//return 0;
int sum1=0;
int sum2=0;
i=0;
j=0;
int cnt=0;
while(cnt!=n){
if(sum1<=sum2){
sum1+=vec1[i];
vec.pb(vec1[i]);
i++;
}
else{
sum2+=vec2[j];
vec.pb(vec2[j]);
j++;
}
cnt++;
}
//return 0;
rep(i,600){
b[i]=0;
}
rep(i,n){
//cout<<vec[i]<<endl;
b[vec[i]]++;
vec[i]=adj[vec[i]][b[vec[i]]-1];
}
//return 0;
rep(i,n){
cout<<vec[i]<<" ";
}
cout<<endl;
return 0;
}
int main(){
std::ios::sync_with_stdio(false); cin.tie(NULL);
int t;
cin>>t;
while(t--){
cin>>n;
int i,j;
tot=0;
rep(i,600){
adj[i].clear();
}
f(i,1,n+1){
cin>>a[i];
adj[a[i]].pb(i);
tot+=a[i];
}
rep(i,n+2){
rep(j,tot+3){
pre[i][j]=0;
suff[i][j]=0;
}
}
sort(a+1,a+n+1);
pre[0][0]=1;
int sumi=1,elem;
f(i,1,n+1){
elem=a[i];
rep(j,sumi){
if(pre[i-1][j]){
pre[i][j]=1;
pre[i][j+elem]=1;
}
}
sumi+=elem;
}
suff[n+1][0]=1;
sumi=1;
fd(i,n,1){
elem=a[i];
rep(j,sumi){
if(suff[i+1][j]){
suff[i][j]=1;
suff[i][j+elem]=1;
}
}
sumi+=elem;
}
int haha;
int maxi=0,posi=0;
f(i,1,n+1){
tot-=a[i];
haha=a[i]+getans(i);
tot+=a[i];
if(maxi<=haha){
maxi=haha;
posi=i;
}
}
int wow=a[posi],cnt=0;
f(i,posi,n+1){
if(wow!=a[i]){
wow=a[i];
cnt++;
}
}
//cout<<"last coin: "<<a[posi]<<" cnt of distinct elements greater: "<<cnt<<endl;
//return 0;
//cout<<maxi<<endl;
extractans(posi);
}
return 0;
}
Ly90ZWphMzQ5CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGNsaW1pdHM+CiNpbmNsdWRlIDx1dGlsaXR5PgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPHN0YWNrPgojaW5jbHVkZSA8aW9tYW5pcD4gCi8vc2V0YmFzZSAtIGNvdXQgPDwgc2V0YmFzZSAoMTYpOyBjb3V0IDw8IDEwMCA8PCBlbmRsOyBQcmludHMgNjQKLy9zZXRmaWxsIC0gICBjb3V0IDw8IHNldGZpbGwgKCd4JykgPDwgc2V0dyAoNSk7IGNvdXQgPDwgNzcgPDwgZW5kbDsgcHJpbnRzIHh4eDc3Ci8vc2V0cHJlY2lzaW9uIC0gY291dCA8PCBzZXRwcmVjaXNpb24gKDE0KSA8PCBmIDw8IGVuZGw7IFByaW50cyB4Lnh4eHgKLy9jb3V0LnByZWNpc2lvbih4KSAgY291dDw8Zml4ZWQ8PHZhbDsgIC8vIHByaW50cyB4IGRpZ2l0cyBhZnRlciBkZWNpbWFsIGluIHZhbAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBmKGksYSxiKSBmb3IoaT1hO2k8YjtpKyspCiNkZWZpbmUgcmVwKGksbikgZihpLDAsbikKI2RlZmluZSBmZChpLGEsYikgZm9yKGk9YTtpPj1iO2ktLSkKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSB2aSB2ZWN0b3I8IGludCA+CiNkZWZpbmUgdmwgdmVjdG9yPCBsbCA+CiNkZWZpbmUgc3Mgc2Vjb25kCiNkZWZpbmUgZmYgZmlyc3QKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBwaWkgcGFpcjwgaW50LGludCA+CiNkZWZpbmUgcGxsIHBhaXI8IGxsLGxsID4KI2RlZmluZSBzeihhKSBhLnNpemUoKQojZGVmaW5lIGluZiAoMTAwMCoxMDAwKjEwMDArNSkKI2RlZmluZSBhbGwoYSkgYS5iZWdpbigpLGEuZW5kKCkKI2RlZmluZSB0cmkgcGFpcjxpbnQscGlpPgojZGVmaW5lIHZpaSB2ZWN0b3I8cGlpPgojZGVmaW5lIHZsbCB2ZWN0b3I8cGxsPgojZGVmaW5lIHZpaWkgdmVjdG9yPHRyaT4KI2RlZmluZSBtb2QgKDEwMDAqMTAwMCoxMDAwKzcpCiNkZWZpbmUgcHF1ZXVlIHByaW9yaXR5X3F1ZXVlPCBpbnQgPgojZGVmaW5lIHBkcXVldWUgcHJpb3JpdHlfcXVldWU8IGludCx2aSAsZ3JlYXRlcjwgaW50ID4gPgojZGVmaW5lIGZsdXNoIGZmbHVzaChzdGRvdXQpIAojZGVmaW5lIHByaW1lREVOIDcyNzk5OTk4MwptdDE5OTM3IHJuZyhjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpOwogCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp2b2lkIHByaW50dmVjKHZlY3RvcjxUPiYgdmVjKXsKCWZvcihpbnQgaT0wO2k8dmVjLnNpemUoKTtpKyspewoJCWNvdXQ8PHZlY1tpXTw8IiAiOwoJfQoJY291dDw8ZW5kbDsKfQoKCmJvb2wgcHJlWzUxMF1bNTAwKjUwMCsxMl07CmJvb2wgc3VmZls1MTBdWzUwMCo1MDArMTJdOwppbnQgYVs1MTJdOwppbnQgdG90PTA7CmludCBuOwppbnQgZ2V0YW5zKGludCBwb3MpewoJaW50IHJlcWQ9dG90LzI7CglpbnQgaSxqPXJlcWQ7CglpbnQgd293PTA7CglyZXAoaSxyZXFkKzEpewoJCWlmKCFwcmVbcG9zLTFdW2ldKXsKCQkJY29udGludWU7CgkJfQoJCXdoaWxlKGoraT5yZXFkKQoJCQlqLS07CgkJd2hpbGUoaj49MCAmJiBzdWZmW3BvcysxXVtqXT09MCkKCQkJai0tOwoJCWlmKGo+PTApewoJCQl3b3c9bWF4KGoraSx3b3cpOwoJCX0KCX0KCXJldHVybiB3b3c7Cn0KaW50IGZpbls1MDAqNTAwKzEyXSxkdW1bNTAwKjUwMCsxMl0scGFyWzUwMCo1MDArMTJdOwppbnQgYls2MTBdOwp2ZWN0b3I8dmk+IGFkaig3MDApOwppbnQgZXh0cmFjdGFucyhpbnQgcG9zKXsKCS8vY291dDw8cG9zPDxlbmRsOwoJLy9yZXR1cm4gMDsKCWludCBpLGo7CglyZXAoaSx0b3QrMTApewoJCWZpbltpXT0wOwoJCWR1bVtpXT0wOwoJCXBhcltpXT0wOwoJfQoJLy9yZXR1cm4gMDsKCWZpblswXT0xOwoJaW50IHN1bWk9MTsKCWludCBlbGVtOwoJZihpLDEsbisxKXsKCQlpZihpPT1wb3MpCgkJCWNvbnRpbnVlOwoJCWVsZW09YVtpXTsKCQlyZXAoaixzdW1pKXsKCQkJaWYoZmluW2pdKQoJCQkJZHVtW2pdPTE7CgkJCWlmKGZpbltqXSAmJiAhZmluW2orZWxlbV0pewoJCQkJZHVtW2orZWxlbV09MTsKCQkJCXBhcltqK2VsZW1dPWVsZW07CgkJCX0KCQl9CgkJc3VtaSs9ZWxlbTsKCQlyZXAoaixzdW1pKXsKCQkJZmluW2pdPWR1bVtqXTsKCQl9Cgl9Cgl0b3QtPWFbcG9zXTsKCWludCByZXFkPXRvdC8yOwoJZmQoaSxyZXFkLDApewoJCWlmKGZpbltpXSkKCQkJYnJlYWs7Cgl9CgkvL3JldHVybiAwOwoKCXZpIHZlYzE7Cgl2aSB2ZWMyLHZlYzsKCXdoaWxlKGkhPTApewoJCXZlYzEucGIocGFyW2ldKTsKCQkvL2NvdXQ8PHBhcltpXTw8ZW5kbDsKCQlpPWktcGFyW2ldOwoJfQoJLy9yZXR1cm4gMDsKCXZlYzEucGIoYVtwb3NdKTsKCXJlcChpLDYwMCl7CgkJYltpXT0wOwoJfQoJZihpLDEsbisxKXsKCQliW2FbaV1dKys7Cgl9CglyZXAoaSx2ZWMxLnNpemUoKSl7CgkJYlt2ZWMxW2ldXS0tOwoJfQoJcmVwKGksNjAwKXsKCQlyZXAoaixiW2ldKXsKCQkJdmVjMi5wYihpKTsKCQl9Cgl9CgkvL3JldHVybiAwOwoJaW50IHN1bTE9MDsKCWludCBzdW0yPTA7CglpPTA7CglqPTA7CglpbnQgY250PTA7Cgl3aGlsZShjbnQhPW4pewoJCWlmKHN1bTE8PXN1bTIpewoJCQlzdW0xKz12ZWMxW2ldOwoJCQl2ZWMucGIodmVjMVtpXSk7CgkJCWkrKzsKCQl9CgkJZWxzZXsKCQkJc3VtMis9dmVjMltqXTsKCQkJdmVjLnBiKHZlYzJbal0pOwoJCQlqKys7CgkJfQoJCWNudCsrOwoJfQoJLy9yZXR1cm4gMDsKCXJlcChpLDYwMCl7CgkJYltpXT0wOwoJfQoJcmVwKGksbil7CgkJLy9jb3V0PDx2ZWNbaV08PGVuZGw7CgkJYlt2ZWNbaV1dKys7CgkJdmVjW2ldPWFkalt2ZWNbaV1dW2JbdmVjW2ldXS0xXTsKCX0KCS8vcmV0dXJuIDA7CglyZXAoaSxuKXsKCQljb3V0PDx2ZWNbaV08PCIgIjsKCX0KCWNvdXQ8PGVuZGw7CglyZXR1cm4gMDsKfQppbnQgbWFpbigpewogICAgc3RkOjppb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUoTlVMTCk7CiAgICBpbnQgdDsKICAgIGNpbj4+dDsKICAgIHdoaWxlKHQtLSl7CiAgICAJCiAgICAJY2luPj5uOwogICAgCWludCBpLGo7CiAgICAJdG90PTA7CiAgICAJcmVwKGksNjAwKXsKICAgIAkJYWRqW2ldLmNsZWFyKCk7CiAgICAJfQogICAgCWYoaSwxLG4rMSl7CiAgICAJCWNpbj4+YVtpXTsKICAgIAkJYWRqW2FbaV1dLnBiKGkpOwogICAgCQl0b3QrPWFbaV07CiAgICAJfQogICAgCXJlcChpLG4rMil7CiAgICAJCXJlcChqLHRvdCszKXsKICAgIAkJCXByZVtpXVtqXT0wOwogICAgCQkJc3VmZltpXVtqXT0wOwogICAgCQl9CiAgICAJfQogICAgCXNvcnQoYSsxLGErbisxKTsKICAgIAlwcmVbMF1bMF09MTsKICAgIAlpbnQgc3VtaT0xLGVsZW07CiAgICAJZihpLDEsbisxKXsKICAgIAkJZWxlbT1hW2ldOwogICAgCQlyZXAoaixzdW1pKXsKICAgIAkJCWlmKHByZVtpLTFdW2pdKXsKICAgIAkJCQlwcmVbaV1bal09MTsKICAgIAkJCQlwcmVbaV1baitlbGVtXT0xOwogICAgCQkJfQogICAgCQl9CiAgICAJCXN1bWkrPWVsZW07CiAgICAJfQogICAgCXN1ZmZbbisxXVswXT0xOwogICAgCXN1bWk9MTsKICAgIAlmZChpLG4sMSl7CiAgICAJCWVsZW09YVtpXTsKICAgIAkJcmVwKGosc3VtaSl7CiAgICAJCQlpZihzdWZmW2krMV1bal0pewogICAgCQkJCXN1ZmZbaV1bal09MTsKICAgIAkJCQlzdWZmW2ldW2orZWxlbV09MTsKICAgIAkJCX0KICAgIAkJfQogICAgCQlzdW1pKz1lbGVtOwogICAgCX0KICAgIAlpbnQgaGFoYTsKICAgIAlpbnQgbWF4aT0wLHBvc2k9MDsKICAgIAlmKGksMSxuKzEpewogICAgCQl0b3QtPWFbaV07CiAgICAJCWhhaGE9YVtpXStnZXRhbnMoaSk7CiAgICAJCXRvdCs9YVtpXTsKICAgIAkJaWYobWF4aTw9aGFoYSl7CiAgICAJCQltYXhpPWhhaGE7CiAgICAJCQlwb3NpPWk7CiAgICAJCX0KICAgIAl9CiAgICAJaW50IHdvdz1hW3Bvc2ldLGNudD0wOwogICAgCWYoaSxwb3NpLG4rMSl7CiAgICAJCWlmKHdvdyE9YVtpXSl7CiAgICAJCQl3b3c9YVtpXTsKICAgIAkJCWNudCsrOwogICAgCQl9CiAgICAJfQogICAgCS8vY291dDw8Imxhc3QgY29pbjogIjw8YVtwb3NpXTw8IiAgIGNudCBvZiBkaXN0aW5jdCBlbGVtZW50cyBncmVhdGVyOiAgIjw8Y250PDxlbmRsOwogICAgCS8vcmV0dXJuIDA7CiAgICAJLy9jb3V0PDxtYXhpPDxlbmRsOwogICAgCWV4dHJhY3RhbnMocG9zaSk7CgogICAgfQogICAgcmV0dXJuIDA7ICAgCn0=