#include <bits/stdc++.h>
using namespace std;
inline void getInt(int* p);
const int maxn = 1000010;
const int inf = 0x3f3f3f3f;
int t;
struct node {
  int l;
  int r;
  int id;
};
std::vector<struct node> v;
int n;
bool cmp(struct node a, struct node b) {
  if (a.l != b.l) {
    return a.l < b.l;
  } else {
    return a.r < b.r;
  }
}
int ans[maxn];
int main() {
  scanf("%d", &t);
  while (t--) {
    v.clear();
    scanf("%d", &n);
    struct node temp;
    for (int i = 1; i <= n; i++) {
      scanf("%d %d", &temp.l, &temp.r);
      temp.id = i;
      v.push_back(temp);
    }
    sort(v.begin(), v.end(), cmp);
    int le, ri;
    le = v[0].l;
    ri = v[0].r;
    int is2 = 0;
    ans[v[0].id] = 1;
    for (int i = 1; i <= n - 1; i++) {
      temp = v[i];
      if (temp.l <= le && temp.r >= ri) {
        le = temp.l;
        ri = temp.r;
        ans[v[i].id] = 1;
      } else if (temp.l <= ri && temp.r <= ri) {
        ans[v[i].id] = 1;
      } else if (temp.l <= ri && temp.r > ri) {
        ri = temp.r;
        ans[v[i].id] = 1;
      } else if (temp.l > ri) {
        is2 = 1;
        ans[v[i].id] = 2;
      }
    }
    if (is2) {
      for (int i = 1; i <= n; i++) {
        printf("%d ", ans[i]);
      }
      printf("\n");
    } else {
      printf("-1\n");
    }
  }
  return 0;
}
inline void getInt(int* p) {
  char ch;
  do {
    ch = getchar();
  } while (ch == ' ' || ch == '\n');
  if (ch == '-') {
    *p = -(getchar() - '0');
    while ((ch = getchar()) >= '0' && ch <= '9') {
      *p = *p * 10 - ch + '0';
    }
  } else {
    *p = ch - '0';
    while ((ch = getchar()) >= '0' && ch <= '9') {
      *p = *p * 10 + ch - '0';
    }
  }
}
