#include <bits/stdc++.h>
using namespace std;
struct point {
  int a, b;
};
bool compare(struct point a, struct point b) { return a.a < b.a; }
int main() {
  int trial, t, i;
  cin >> trial;
  for (t = 0; t < trial; t++) {
    int N, n;
    cin >> N;
    vector<struct point> arr(N);
    vector<struct point> arr_copy(N);
    for (n = 0; n < N; n++) {
      cin >> arr[n].a >> arr[n].b;
      arr_copy[n].a = arr[n].a;
      arr_copy[n].b = arr[n].b;
    }
    sort(arr.begin(), arr.begin() + arr.size(), compare);
    stack<struct point> s;
    s.push(arr[0]);
    for (i = 1; i < N; i++) {
      struct point temp = s.top();
      if (temp.a <= arr[i].a && arr[i].a <= temp.b) {
        temp.b = max(arr[i].b, temp.b);
        s.pop();
        s.push(temp);
      } else {
        s.push(arr[i]);
      }
    }
    if (s.size() >= 2) {
      struct point t1 = s.top();
      s.pop();
      for (i = 0; i < N; i++) {
        if (arr_copy[i].b < t1.a)
          cout << "1 ";
        else
          cout << "2 ";
      }
    } else
      cout << "-1";
    cout << "\n";
  }
}
