#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;
}
