#include <bits/stdc++.h>
using namespace std;
#define int long long
#define vo vector
#define pb push_back
#define se second
#define fi first
#define sz(x) x.size()
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pii;
#define umap unordered_map
#define uset unordered_set
#define rep(i, a, b) for(ll i=(a); i<b; i++)
#define pr1(x) cerr << #x << '=' << x << ' ';
//for google contests
#define all(v) v.begin(), v.end()
#define repd(i, a, b) for(ll i=(b-1); i >= a; i--)
void _pr(signed x) {cerr << x;}
void _pr(long long x) {cerr << x;}
void _pr(unsigned long long x) {cerr << x;}
void _pr(double x) {cerr << x;}
void _pr(char x) {cerr << '\'' << x << '\'';}
void _pr(const char* x) {cerr << x;}
void _pr(bool x) {cerr << (x ? "true" : "false");}
template<typename T, typename V> void _pr(const pair<T, V> &x);
template<typename T, typename V> void _pr(const pair<T, V> &x) {cerr << "\e[95m" << "[ "; _pr(x.first); cerr << ", "; _pr(x.second); cerr << "\e[95m" << ']';}
template<typename T> void _pr(const T &x) {int F=0; cerr << '{'; for(auto &i: x) cerr << (F++ ? ", " : ""), _pr(i); cerr << "\e[91m" << '}';}
template <typename T, typename... V> void _pr(T t, V... v) {_pr(t); if(sizeof...(v)) cerr << ", "; _pr(v...);}
#define pr(x...) cerr << "\e[91m" << __func__ << ':' << __LINE__ << " [" << #x << "] = ["; _pr(x); cerr << "\e[91m" << ']' << "\033[0m" << endl;
//go for outline with ;, then details
ll const inf = LLONG_MAX, mxn = 105;
int t, n;
map<int, pii> abc;
bool check(int a, int b, int u, int lb){
// pr(a, b, u)
if((a+b)%n == u){
abc[a] = {b, u};
cout << "YES\n";
rep(i, 0, n-1){
cout << abc[i].fi << " ";
}
cout << lv << "\n";
return 1;
}
return 0;
}
void solve(){
cin>>n; abc.clear();
vi a(n), b(n); int sum = 0;
iota(all(a), 0);
multiset<int> notChosenB, notChosenC;
rep(i, 0, n) {cin>>b[i]; sum+=b[i]; notChosenB.insert(b[i]); notChosenC.insert(i);}
if(sum % n) {cout << "NO\n"; return;}
// pr(notChosenB)
// pr(notChosenC)
rep(i, 0, n-2){
for(auto x: notChosenB){
int ns = (i+x)%n;
if(notChosenC.count(ns)){
abc[i] = {x, ns};
notChosenC.erase(ns);
notChosenB.erase(notChosenB.find(x));
break;
}
}
}
// pr(notChosenB)
// pr(notChosenC);
int a1 = n-2, a2 = n-1, b1 = *notChosenB.begin(), b2 = *notChosenB.rbegin(), u1 = *notChosenC.begin(), u2 = *notChosenC.rbegin();
while(1){
if(check(a1, b1, u1, b2)) return;
if(check(a1, b1, u2, b2)) return;
if(check(a1, b2, u1, b1)) return;
if(check(a1, b2, u2, b1)) return;
//swap
int ar1 = (u1-b1)%n;
b1 = b2, u1 = u2;
b2 = abc[ar1].fi, u2 = abc[ar1].se;
abc[ar1] = {b1, u1};
}
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
cin>>t;
rep(_, 0, t){
solve();
}
}
/*
1
5
4 1 2 1 2
*/