#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template <class T>
using OS = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;
void solve(int cs) {
int n;
cin >> n;
vector<int> c(n);
for (int i = 0; i < n; i++) cin >> c[i];
for (int i = 0; i < n; i++) {
if (c[i] > (n - i - 1)) {
cout << "NO\n";
return;
}
}
cout << "YES\n";
OS <int> st;
st.insert(1 << 28);
vector<int> ans(n);
ans.back() = *st.begin();
for (int i = n - 2; i >= 0; --i) {
int who;
if (c[i] == 0) who = *st.rbegin() + 2 * i;
else who = *st.find_by_order(st.size() - c[i]) - 2;
ans[i] = who;
st.insert(ans[i]);
}
for (int i = 0; i < n; i++) {
cout << ans[i] << " \n"[i + 1 == n];
}
}
int32_t main() {
ios::sync_with_stdio(!cin.tie(0));
int t = 1;
cin >> t;
for (int i = 1; i <= t; ++i) {
solve(i);
}
return 0;
}