#include <bits/stdc++.h>
using namespace std;
;
const double eps = 1e-8;
const int mod = 1000000007;
const int maxn = 1e5 + 7;
const double pi = acos(-1);
const int inf = 0x3f3f3f3f;
const long long INF = 0x3f3f3f3f3f3f3f3fLL;
int t, n;
int vis[maxn];
vector<int> v[maxn];
struct node {
  int l, r, id;
  bool operator<(const node& x) const { return l == x.l ? r < x.r : l < x.l; }
} num[maxn];
int main() {
  scanf("%d", &t);
  while (t--) {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
      scanf("%d%d", &num[i].l, &num[i].r);
      num[i].id = i;
    }
    sort(num + 1, num + n + 1);
    int cnt = 0;
    v[0].push_back(num[1].id);
    int mx = num[1].r;
    for (int i = 2; i <= n; i++) {
      if (num[i].l <= mx) {
        v[cnt].push_back(num[i].id);
      } else {
        v[++cnt].push_back(num[i].id);
      }
      mx = max(mx, num[i].r);
    }
    if (cnt == 0) {
      printf("-1\n");
    } else {
      int flag1 = 0, flag2 = 0;
      for (int i = 0; i <= cnt; i++) {
        for (int j = 0; j < (int)v[i].size(); j++) {
          if (i % 2 == 0)
            vis[v[i][j]] = 2, flag2 = 1;
          else
            vis[v[i][j]] = 1, flag1 = 1;
        }
      }
      for (int i = 1; i <= n; i++) {
        printf("%d ", vis[i]);
      }
      printf("\n");
    }
    for (int i = 0; i <= cnt; i++) {
      v[i].clear();
    }
    for (int i = 1; i <= n; i++) {
      vis[i] = 0;
    }
  }
  return 0;
}
