#include <bits/stdc++.h>
using namespace std;
long long INF = 1e15;
long long MOD = 1e9 + 7;
vector<pair<long long, long long> > V;
int T, N, a;
vector<long long> G[500100];
void run() {
  int A[N + 2];
  stack<pair<pair<long long, long long>, int> > st;
  while ((int)st.size()) st.pop();
  memset(A, 0, sizeof(A));
  for (int i = 0; i < (int)V.size(); ++i) G[i].clear();
  V.push_back(make_pair(-1, N));
  sort(V.begin(), V.end());
  for (int i = 0; i < (int)V.size(); ++i) G[i].clear();
  for (int it = 1; it < (int)V.size(); ++it) {
    pair<long long, long long> i = V[it];
    while ((int)st.size() && st.top().first.second <= i.first) {
      st.pop();
    }
    if ((int)st.size() == 0) {
      st.push(make_pair(i, it));
      G[0].push_back(it);
      continue;
    }
    if (st.top().first.second >= i.second) {
      G[st.top().second].push_back(it);
      st.push(make_pair(i, it));
      continue;
    }
    cout << -1 << '\n';
    return;
  }
  V[0].first = 1;
  pair<long long, long long> rang[(int)V.size()];
  rang[0] = make_pair(1, N);
  A[N + 1] = N + 1;
  for (int i = 0; i < (int)V.size(); ++i) {
    if (i) {
      rang[i].second = rang[i].first + V[i].second - V[i].first - 2;
      if (rang[i].second < 0) continue;
    }
    vector<long long> tmp;
    for (auto x : G[i]) {
      tmp.push_back(V[x].first);
      tmp.push_back(V[x].second);
    }
    tmp.resize(unique(tmp.begin(), tmp.end()) - tmp.begin());
    reverse(tmp.begin(), tmp.end());
    for (auto v : tmp) {
      if (A[v]) continue;
      A[v] = rang[i].second;
      --rang[i].second;
    }
    int ind = 0;
    int cnt = rang[i].first;
    for (int j = V[i].first; j <= V[i].second; ++j) {
      if (A[j] != 0) continue;
      while ((int)G[i].size() > ind && j > V[G[i][ind]].first + 1) ++ind;
      if ((int)G[i].size() > ind && j == V[G[i][ind]].first + 1) {
        int t = G[i][ind];
        rang[t].first = cnt;
        int l = V[t].second - V[t].first - 1;
        cnt += l;
        j += l;
        ++ind;
        continue;
      }
      A[j] = cnt++;
    }
  }
  for (int i = 1; i <= N; ++i) cout << A[i] << ' ';
  cout << '\n';
}
int main() {
  cin >> T;
  while (T--) {
    cin >> N;
    V.clear();
    for (int i = 1; i <= N; ++i) {
      cin >> a;
      if (a != -1) V.push_back(make_pair(i, a));
    }
    run();
  }
}
