#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
int main() {
//cin.tie(0)->sync_with_stdio(0);
int t; cin >> t;
while (t--) {
int n; cin >> n;
vector<int> a(n);
vector<pair<int, int>> alive; // {a[i], i}
for (int &x : a) {
cin >> x;
if (x == -1) x = n + 1;
}
for (int i = 0; i < n; i++) {
alive.push_back(make_pair(a[i], i));
}
vector<int> l(n), r(n);
for (int i = 0; i < n; i++) {
l[i] = i - 1;
r[i] = i + 1;
}
vector<vector<int>> adj(n);
sort(alive.rbegin(), alive.rend());
vector<int> indegree(n, 0), ans(n);
int step = 1;
while (alive.size() > 1) {
// (u, v) -> p[u] > p[v]
for (auto p : alive) {
if (p.first == step) continue;
int u = p.second;
if (l[u] >= 0) {
if (step % 2 == 1) { // u is local min
adj[l[u]].push_back(u);
indegree[u]++;
} else {
adj[u].push_back(l[u]);
indegree[l[u]]++;
}
}
if (r[u] < n) {
if (step % 2 == 1) {
adj[r[u]].push_back(u);
indegree[u]++;
} else {
adj[u].push_back(r[u]);
indegree[r[u]]++;
}
}
}
while (alive.size() > 0 && alive.back().first == step) {
int idx = alive.back().second;
if (l[idx] >= 0) r[l[idx]] = r[idx];
if (r[idx] < n) l[r[idx]] = l[idx];
alive.pop_back();
}
step++;
}
// for (int i = 0; i < n; i++) {
// for (int j : adj[i]) {
// cout << "(" << i << ", " << j << ")" << '\n';
// }
// }
queue<int> q;
for (int i = 0; i < n; i++) if (indegree[i] == 0) q.push(i);
int val = n;
while (!q.empty()) {
int u = q.front(); q.pop();
ans[u] = val--;
for (int v : adj[u]) {
indegree[v]--;
if (indegree[v] == 0) q.push(v);
}
}
for (int x : ans) cout << x << ' ';
cout << '\n';
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCS8vY2luLnRpZSgwKS0+c3luY193aXRoX3N0ZGlvKDApOwoJaW50IHQ7IGNpbiA+PiB0OwoJd2hpbGUgKHQtLSkgewoJCWludCBuOyBjaW4gPj4gbjsKCQl2ZWN0b3I8aW50PiBhKG4pOwoJCXZlY3RvcjxwYWlyPGludCwgaW50Pj4gYWxpdmU7IC8vIHthW2ldLCBpfQoJCWZvciAoaW50ICZ4IDogYSkgewoJCQljaW4gPj4geDsKCQkJaWYgKHggPT0gLTEpIHggPSBuICsgMTsKCQl9CgkJCgkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKCQkJYWxpdmUucHVzaF9iYWNrKG1ha2VfcGFpcihhW2ldLCBpKSk7CgkJfQoJCQoJCXZlY3RvcjxpbnQ+IGwobiksIHIobik7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKCQkJbFtpXSA9IGkgLSAxOwoJCQlyW2ldID0gaSArIDE7CgkJfQoKCQl2ZWN0b3I8dmVjdG9yPGludD4+IGFkaihuKTsKCQlzb3J0KGFsaXZlLnJiZWdpbigpLCBhbGl2ZS5yZW5kKCkpOwoKCQl2ZWN0b3I8aW50PiBpbmRlZ3JlZShuLCAwKSwgYW5zKG4pOwoKCQlpbnQgc3RlcCA9IDE7CgkJd2hpbGUgKGFsaXZlLnNpemUoKSA+IDEpIHsKCQkKCQkJLy8gKHUsIHYpIC0+IHBbdV0gPiBwW3ZdCgkJCWZvciAoYXV0byBwIDogYWxpdmUpIHsKCQkJCWlmIChwLmZpcnN0ID09IHN0ZXApIGNvbnRpbnVlOwoJCQkJaW50IHUgPSBwLnNlY29uZDsKCQkJCWlmIChsW3VdID49IDApIHsKCQkJCQlpZiAoc3RlcCAlIDIgPT0gMSkgeyAvLyB1IGlzIGxvY2FsIG1pbgoJCQkJCQlhZGpbbFt1XV0ucHVzaF9iYWNrKHUpOwoJCQkJCQlpbmRlZ3JlZVt1XSsrOwoJCQkJCX0gZWxzZSB7CgkJCQkJCWFkalt1XS5wdXNoX2JhY2sobFt1XSk7CgkJCQkJCWluZGVncmVlW2xbdV1dKys7CgkJCQkJfQoJCQkJfQoJCQkJaWYgKHJbdV0gPCBuKSB7CgkJCQkJaWYgKHN0ZXAgJSAyID09IDEpIHsKCQkJCQkJYWRqW3JbdV1dLnB1c2hfYmFjayh1KTsKCQkJCQkJaW5kZWdyZWVbdV0rKzsKCQkJCQl9IGVsc2UgewoJCQkJCQlhZGpbdV0ucHVzaF9iYWNrKHJbdV0pOwoJCQkJCQlpbmRlZ3JlZVtyW3VdXSsrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQl3aGlsZSAoYWxpdmUuc2l6ZSgpID4gMCAmJiBhbGl2ZS5iYWNrKCkuZmlyc3QgPT0gc3RlcCkgewoJCQkJaW50IGlkeCA9IGFsaXZlLmJhY2soKS5zZWNvbmQ7CgkJCQlpZiAobFtpZHhdID49IDApIHJbbFtpZHhdXSA9IHJbaWR4XTsKCQkJCWlmIChyW2lkeF0gPCBuKSBsW3JbaWR4XV0gPSBsW2lkeF07CgkJCQlhbGl2ZS5wb3BfYmFjaygpOwoJCQl9CgkJCXN0ZXArKzsKCQl9CgkJCgkJLy8gZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKCQkvLyAJZm9yIChpbnQgaiA6IGFkaltpXSkgewoJCS8vIAkJY291dCA8PCAiKCIgPDwgaSA8PCAiLCAiIDw8IGogPDwgIikiIDw8ICdcbic7CgkJLy8gCX0KCQkvLyB9CgoJCXF1ZXVlPGludD4gcTsKCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgaWYgKGluZGVncmVlW2ldID09IDApIHEucHVzaChpKTsKCgkJaW50IHZhbCA9IG47CgkJd2hpbGUgKCFxLmVtcHR5KCkpIHsKCQkJaW50IHUgPSBxLmZyb250KCk7IHEucG9wKCk7CgkJCWFuc1t1XSA9IHZhbC0tOwoJCQlmb3IgKGludCB2IDogYWRqW3VdKSB7CgkJCQlpbmRlZ3JlZVt2XS0tOwoJCQkJaWYgKGluZGVncmVlW3ZdID09IDApIHEucHVzaCh2KTsKCQkJfQoJCX0KCgkJZm9yIChpbnQgeCA6IGFucykgY291dCA8PCB4IDw8ICcgJzsKCQljb3V0IDw8ICdcbic7Cgl9Cn0KCg==