#include <bits/stdc++.h>
using namespace std;
const int MOD = 998244353;
double eps = 1e-8;
int head[1100000], vet[1100000], nxt[1100000], q[1100000], inq[1100000],
    ind[1100000], stk[1100000], a[1100000], ans[1100000], tot;
int read() {
  int v = 0, f = 1;
  char c = getchar();
  while (c < 48 || 57 < c) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (48 <= c && c <= 57) v = (v << 3) + v + v + c - 48, c = getchar();
  return v * f;
}
int add(int a, int b) {
  nxt[++tot] = head[a];
  vet[tot] = b;
  head[a] = tot;
}
int main() {
  int cas = read();
  while (cas--) {
    int n = read();
    int tot = 0;
    for (int i = (int)1; i <= (int)n + 1; i++) head[i] = 0;
    for (int i = (int)1; i <= (int)n; i++) {
      a[i] = read();
      if (a[i] == -1) a[i] = i + 1;
    }
    int top = 1;
    stk[1] = n + 1;
    for (int i = (int)1; i <= (int)n + 1; i++) inq[i] = ind[i] = 0;
    inq[n + 1] = 1;
    int flag = 1;
    for (int i = (int)n; i >= (int)1; i--) {
      if (!inq[a[i]]) {
        flag = 0;
        break;
      }
      while (stk[top] != a[i]) {
        inq[stk[top]] = 0;
        add(i, stk[top]);
        ind[stk[top]]++;
        top--;
      }
      add(stk[top], i);
      ind[i]++;
      stk[++top] = i;
      inq[i] = 1;
    }
    if (!flag) {
      printf("-1\n");
      continue;
    }
    int t = 0, w = 0;
    for (int i = (int)1; i <= (int)n + 1; i++)
      if (!ind[i]) q[++w] = i;
    while (t < w) {
      int u = q[++t];
      int e = head[u];
      while (e) {
        int v = vet[e];
        ind[v]--;
        if (!ind[v]) q[++w] = v;
        e = nxt[e];
      }
    }
    if (t < n + 1) {
      printf("-1\n");
      continue;
    }
    for (int i = (int)2; i <= (int)n + 1; i++) ans[q[i]] = n - i + 2;
    for (int i = (int)1; i <= (int)n; i++) printf("%d ", ans[i]);
    printf("\n");
  }
  return 0;
}
