#pragma ccc optimize(3)
#pragma ccc optimize(2)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define re register
#define INF 0x3f3f3f3f
#define il inline
#define pb push_back
#define ft first
#define sd second
#define mp make_pair
#define INF 0x3f3f3f3f
#define pb push_back
//#define cin fin
//#define cout fout
//ifstream cin("文件名.in");
//ofstream cout("文件名.out");
const int MAXN = 3e5;
ll a[MAXN + 5], ans[MAXN + 5];
void solve(){
int n;
cin >> n;
ll maxn = 0;
for(int i = 1; i <= n; ++i){
cin >> a[i];
maxn = max(maxn, a[i]);
}
if(maxn == 0){
cout << "No" << endl;
return;
}
cout << "Yes" << endl;
priority_queue<ll,vector<ll>,greater<ll> > pq1;
priority_queue<ll> pq;
for(int i = 1; i <= n; ++i){
if(a[i] < 0)pq.push(a[i]);
else pq1.push(a[i]);
}
ll sum = 0;
while((!pq.empty()) || (!pq1.empty())){
if(pq.empty()){
cout << pq1.top() << ' ';
pq1.pop();
continue;
}
else if(pq1.empty()){
cout << pq.top() << ' ';
pq.pop();
continue;
}
if(sum == 0){
if(pq.size() > pq1.size()){
cout << pq.top() << ' ';
sum += pq.top();
pq.pop();
}
else{
cout << pq1.top() << ' ';
sum += pq1.top();
pq1.pop();
}
}
else{
if(sum + pq1.top() + pq.top() < 0){
cout << pq1.top() << ' ';
sum += pq1.top();
pq1.pop();
}
else{
cout << pq.top() << ' ';
sum += pq.top();
pq.pop();
}
}
}
cout << endl;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
for(re int o = 0; o < t; ++o){
solve();
}
return 0;
}
第66行加上等于号就过了,百思不得其解,故向佬乞援。