1
10 2 20
8 5 2 4 10 3 9 7 1 6
5 10
3 17
6 31
3 46
10 42
7 19
9 36
7 3
3 13
8 32
10 25
9 34
10 34
6 33
3 9
2 17
4 5
10 44
9 15
5 40
 1
47 1 47
40 45 19 10 44 33 47 12 2 46 16 23 3 14 21 28 31 42 22 18 35 38 24 25 36 32 4 34 5 20 37 39 6 9 1 7 29 8 17 27 30 11 13 41 15 43 26
39 25
41 24
32 30
10 6
30 13
24 35
41 17
31 31
9 44
21 8
43 23
8 5
29 13
8 4
47 20
22 10
37 27
17 39
43 23
14 42
46 19
43 24
30 31
24 35
31 13
31 32
20 9
3 2
20 9
14 7
7 3
21 36
32 30
47 19
11 43
6 2
31 31
26 12
47 20
2 1
40 24
16 40
45 21
36 28
36 28
17 38
30 31
 1
1 1 4
1
1 1
1 2
1 3
1 4
 1
10 1 1
10 4 6 5 7 9 8 1 3 2
6 10

3
2
7
10
6
7
7
7
5
1
6
6
1
9
4
4
4
1
1
3
 27
27
37
16
20
24
11
20
46
35
11
2
34
47
26
24
7
28
11
3
26
13
37
24
37
37
22
10
22
14
47
38
37
43
23
33
20
4
26
19
30
21
43
1
1
42
37
 1
-1
-1
-1
 9

#include <bits/stdc++.h>
using namespace std;
struct man {
  long long h, w, id;
};
long long n;
vector<man> f;
vector<long long> ans;
vector<man> fs;
bool operator<(const man &a, const man &b) {
  return a.h < b.h || a.h == b.h && a.w < b.w;
}
bool check(long long x, man y) {
  if (fs[x].h < y.h && fs[x].w < y.w || fs[x].w < y.h && fs[x].h < y.w)
    return true;
  return false;
}
bool find(long long x) {
  man k = f[x];
  long long l = 0, r = n - 1;
  while (l < r) {
    long long mid = l + r + 1 >> 1;
    if (check(mid, k))
      l = mid;
    else
      r = mid - 1;
  }
  if (fs[r + 1].h == k.h && fs[r + 1].w == k.w) {
    ans.push_back(fs[r + 1].id);
    return true;
  }
  return false;
}
signed main() {
  long long T;
  cin >> T;
  while (T--) {
    cin >> n;
    ans.clear();
    f.clear();
    fs.clear();
    for (long long i = 1; i <= n; i++) {
      long long h, w;
      cin >> h >> w;
      f.push_back({h, w, i});
      fs.push_back({h, w, i});
    }
    sort(fs.begin(), fs.end());
    for (long long i = 1; i <= n; i++) {
      if (!find(i)) ans.push_back(-1);
    }
    for (auto e : ans) cout << e << " ";
    puts("");
  }
  return 0;
}
