#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T read() {
  register T sum = 0;
  register char cc = getchar();
  int sym = 1;
  while (cc != '-' && (cc > '9' || cc < '0')) cc = getchar();
  if (cc == '-') sym = -1, cc = getchar();
  sum = sum * 10 + cc - '0';
  cc = getchar();
  while (cc >= '0' && cc <= '9') sum = sum * 10 + cc - '0', cc = getchar();
  return sym * sum;
}
template <typename T>
inline T read(T &a) {
  a = read<T>();
  return a;
}
template <typename T, typename... Others>
inline void read(T &a, Others &...b) {
  a = read(a);
  read(b...);
}
struct Edge {
  int v;
  Edge *next;
  Edge(int a = 0, Edge *b = NULL) {
    v = a;
    next = b;
  }
} * head[500010 << 2];
int T, n, cnt, deg[500010 << 2], dis[500010 << 2], End[500010 << 2],
    pos[500010];
void add(int x, int y) {
  head[x] = new Edge(y, head[x]);
  deg[y] += 1;
}
void build(int k, int l, int r) {
  head[k] = NULL;
  End[k] = dis[k] = deg[k] = 0;
  if (l == r) {
    End[k] = l;
    pos[l] = k;
    return;
  }
  int mid = (l + r) >> 1;
  build(k << 1, l, mid);
  build(k << 1 | 1, mid + 1, r);
  add(k << 1, k);
  add(k << 1 | 1, k);
}
void change(int k, int l, int r, int x, int y, int z) {
  if (l >= x && r <= y) {
    add(k, pos[z]);
    return;
  }
  int mid = (l + r) >> 1;
  if (x <= mid) change(k << 1, l, mid, x, y, z);
  if (y > mid) change(k << 1 | 1, mid + 1, r, x, y, z);
}
void topsort() {
  queue<int> Q;
  for (int i = 1; i <= n; i++)
    if (!deg[pos[i]]) Q.push(pos[i]);
  while (!Q.empty()) {
    int t = Q.front();
    Q.pop();
    if (End[t]) dis[End[t]] = ++cnt;
    for (Edge *i = head[t]; i != NULL; i = i->next) {
      deg[i->v] -= 1;
      if (!deg[i->v]) Q.push(i->v);
    }
  }
}
void print() {
  for (int j = 1; j <= n; j++)
    if (!dis[j]) {
      puts("-1");
      return;
    }
  for (int j = 1; j <= n; j++) printf("%d ", dis[j]);
  putchar('\n');
}
int main() {
  T = read<int>();
  for (int cas = 1; cas <= T; cas++) {
    cnt = 0;
    n = read<int>();
    build(1, 1, n);
    for (int i = 1; i <= n; i++) {
      int r = read<int>();
      if (r == -1) continue;
      if (i + 1 <= r - 1) change(1, 1, n, i + 1, r - 1, i);
      if (r <= n) change(1, 1, n, i, i, r);
    }
    topsort();
    print();
  }
  return 0;
}
