#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 5e5 + 5, MOD = 1e9 + 7;
int a[N], n;
int tree[N << 2], lz[N << 2];
void build(int node, int s, int e) {
  tree[node] = lz[node] = 0;
  if (s == e) return;
  int md = (s + e) >> 1;
  build(node << 1, s, md);
  build(node << 1 | 1, md + 1, e);
}
void push(int node, int s, int e) {
  tree[node] += (lz[node]);
  if (s != e) {
    lz[node << 1] += lz[node];
    lz[node << 1 | 1] += lz[node];
  }
  lz[node] = 0;
}
void upd(int node, int s, int e, int l, int r, int v) {
  push(node, s, e);
  if (r < s || e < l) return;
  if (l <= s && e <= r) {
    lz[node] += v;
    push(node, s, e);
    return;
  }
  int md = (s + e) >> 1;
  upd(node << 1, s, md, l, r, v);
  upd(node << 1 | 1, md + 1, e, l, r, v);
  tree[node] = min(tree[node << 1], tree[node << 1 | 1]);
}
vector<int> gm3;
void qry(int node, int s, int e) {
  push(node, s, e);
  if (tree[node]) return;
  if (s == e) {
    gm3.push_back(s);
    tree[node] = N * 3;
    return;
  }
  int md = (s + e) >> 1;
  qry(node << 1, s, md);
  qry(node << 1 | 1, md + 1, e);
  tree[node] = min(tree[node << 1], tree[node << 1 | 1]);
}
int main() {
  int t;
  scanf("%d", &t);
  while (t--) {
    scanf("%d", &n);
    build(1, 1, n);
    vector<vector<int>> adj(n + 1);
    for (int i = 1; i <= n; i++) scanf("%d", a + i);
    for (int i = 1; i <= n; i++) {
      if (a[i] == -1) continue;
      if (a[i] != i + 1) upd(1, 1, n, i + 1, a[i] - 1, 1);
      if (a[i] != n + 1) {
        adj[a[i]].push_back(i);
        upd(1, 1, n, i, i, 1);
      }
    }
    int cur = n;
    vector<int> ans(n + 1);
    while (true) {
      qry(1, 1, n);
      if (gm3.empty()) break;
      for (auto x : gm3) {
        ans[x] = cur--;
        for (auto v : adj[x]) upd(1, 1, n, v, v, -1);
        int i = x;
        if (a[i] == -1) continue;
        if (a[i] != i + 1) upd(1, 1, n, i + 1, a[i] - 1, -1);
      }
      gm3.clear();
    }
    if (cur) {
      puts("-1");
    } else {
      ans.erase(ans.begin());
      for (auto x : ans) printf("%d ", x);
      puts("");
    }
  }
  return 0;
}
