#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define ll long long
using namespace std;
struct DSU {
vector<int> p;
void init(int n) { p.assign(n + 1, 0); iota(p.begin(), p.end(), 0); }
int find(int x) { while (p[x] != x) { p[x] = p[p[x]]; x = p[x]; } return x; }
void unite(int a, int b) { p[find(a)] = find(b); }
};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> a(n + 1);
for (int i = 1; i <= n; ++i) cin >> a[i];
if (n == 1) {
cout << (a[1] == 1 ? "Yes\n1\n" : "No\n");
continue;
}
vector<int> order(n);
iota(order.begin(), order.end(), 1);
sort(order.begin(), order.end(), [&](int x, int y){
if (a[x] != a[y]) return a[x] > a[y];
return x < y;
});
set<int> freeIdx;
for (int i = 1; i <= n; ++i) freeIdx.insert(i);
DSU dsu;
dsu.init(n);
vector<int> succ(n + 1, 0);
bool ok = true;
for (int k = 0; k < n; ++k) {
int v = order[k];
bool last = (k == n - 1);
auto it = freeIdx.lower_bound(a[v]);
int chosen = -1;
while (it != freeIdx.end()) {
int w = *it;
if (last) { chosen = w; break; }
if (dsu.find(v) != dsu.find(w)) { chosen = w; break; }
++it;
}
if (chosen == -1) { ok = false; break; }
succ[v] = chosen;
dsu.unite(v, chosen);
freeIdx.erase(chosen);
}
if (!ok) { cout << "No\n"; continue; }
vector<int> path;
path.reserve(n);
vector<char> vis(n + 1, 0);
int cur = 1;
bool cycleOk = true;
for (int i = 0; i < n; ++i) {
if (vis[cur]) { cycleOk = false; break; }
vis[cur] = 1;
path.push_back(cur);
cur = succ[cur];
}
if (!cycleOk || cur != 1) { cout << "No\n"; continue; }
cout << "Yes\n";
for (int i = 0; i < n; ++i) {
cout << path[i] << " \n"[i + 1 == n];
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgYWxsKHgpICh4KS5iZWdpbigpLCAoeCkuZW5kKCkKI2RlZmluZSBsbCBsb25nIGxvbmcKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBEU1UgewogICAgdmVjdG9yPGludD4gcDsKICAgIHZvaWQgaW5pdChpbnQgbikgeyBwLmFzc2lnbihuICsgMSwgMCk7IGlvdGEocC5iZWdpbigpLCBwLmVuZCgpLCAwKTsgfQogICAgaW50IGZpbmQoaW50IHgpIHsgd2hpbGUgKHBbeF0gIT0geCkgeyBwW3hdID0gcFtwW3hdXTsgeCA9IHBbeF07IH0gcmV0dXJuIHg7IH0KICAgIHZvaWQgdW5pdGUoaW50IGEsIGludCBiKSB7IHBbZmluZChhKV0gPSBmaW5kKGIpOyB9Cn07CgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIAogICAgaW50IHQ7CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBpbnQgbjsKICAgICAgICBjaW4gPj4gbjsKICAgICAgICB2ZWN0b3I8aW50PiBhKG4gKyAxKTsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIGNpbiA+PiBhW2ldOwogICAgICAgIAogICAgICAgIGlmIChuID09IDEpIHsKICAgICAgICAgICAgY291dCA8PCAoYVsxXSA9PSAxID8gIlllc1xuMVxuIiA6ICJOb1xuIik7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2ZWN0b3I8aW50PiBvcmRlcihuKTsKICAgICAgICBpb3RhKG9yZGVyLmJlZ2luKCksIG9yZGVyLmVuZCgpLCAxKTsKICAgICAgICBzb3J0KG9yZGVyLmJlZ2luKCksIG9yZGVyLmVuZCgpLCBbJl0oaW50IHgsIGludCB5KXsKICAgICAgICAgICAgaWYgKGFbeF0gIT0gYVt5XSkgcmV0dXJuIGFbeF0gPiBhW3ldOwogICAgICAgICAgICByZXR1cm4geCA8IHk7CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgc2V0PGludD4gZnJlZUlkeDsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIGZyZWVJZHguaW5zZXJ0KGkpOwogICAgICAgIAogICAgICAgIERTVSBkc3U7CiAgICAgICAgZHN1LmluaXQobik7CiAgICAgICAgCiAgICAgICAgdmVjdG9yPGludD4gc3VjYyhuICsgMSwgMCk7CiAgICAgICAgYm9vbCBvayA9IHRydWU7CiAgICAgICAgCiAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBuOyArK2spIHsKICAgICAgICAgICAgaW50IHYgPSBvcmRlcltrXTsKICAgICAgICAgICAgYm9vbCBsYXN0ID0gKGsgPT0gbiAtIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgYXV0byBpdCA9IGZyZWVJZHgubG93ZXJfYm91bmQoYVt2XSk7CiAgICAgICAgICAgIGludCBjaG9zZW4gPSAtMTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHdoaWxlIChpdCAhPSBmcmVlSWR4LmVuZCgpKSB7CiAgICAgICAgICAgICAgICBpbnQgdyA9ICppdDsKICAgICAgICAgICAgICAgIGlmIChsYXN0KSB7IGNob3NlbiA9IHc7IGJyZWFrOyB9CiAgICAgICAgICAgICAgICBpZiAoZHN1LmZpbmQodikgIT0gZHN1LmZpbmQodykpIHsgY2hvc2VuID0gdzsgYnJlYWs7IH0KICAgICAgICAgICAgICAgICsraXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChjaG9zZW4gPT0gLTEpIHsgb2sgPSBmYWxzZTsgYnJlYWs7IH0KICAgICAgICAgICAgc3VjY1t2XSA9IGNob3NlbjsKICAgICAgICAgICAgZHN1LnVuaXRlKHYsIGNob3Nlbik7CiAgICAgICAgICAgIGZyZWVJZHguZXJhc2UoY2hvc2VuKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKCFvaykgeyBjb3V0IDw8ICJOb1xuIjsgY29udGludWU7IH0KICAgICAgICAKICAgICAgICB2ZWN0b3I8aW50PiBwYXRoOwogICAgICAgIHBhdGgucmVzZXJ2ZShuKTsKICAgICAgICB2ZWN0b3I8Y2hhcj4gdmlzKG4gKyAxLCAwKTsKICAgICAgICBpbnQgY3VyID0gMTsKICAgICAgICBib29sIGN5Y2xlT2sgPSB0cnVlOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgICAgIGlmICh2aXNbY3VyXSkgeyBjeWNsZU9rID0gZmFsc2U7IGJyZWFrOyB9CiAgICAgICAgICAgIHZpc1tjdXJdID0gMTsKICAgICAgICAgICAgcGF0aC5wdXNoX2JhY2soY3VyKTsKICAgICAgICAgICAgY3VyID0gc3VjY1tjdXJdOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoIWN5Y2xlT2sgfHwgY3VyICE9IDEpIHsgY291dCA8PCAiTm9cbiI7IGNvbnRpbnVlOyB9CiAgICAgICAgCiAgICAgICAgY291dCA8PCAiWWVzXG4iOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgICAgIGNvdXQgPDwgcGF0aFtpXSA8PCAiIFxuIltpICsgMSA9PSBuXTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHJldHVybiAwOwp9Cg==