#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 10;
int i, j, k, n, m;
struct Section {
  int l, r;
} z[N];
int store[N * 2], tot;
bool cmp(int a, int b) { return a < b; }
int disva = 0;
map<int, int> s;
struct Edge {
  int y, l, id;
  bool enable;
} f[N * 4];
int g[N * 2], In[N * 2], T;
void Ins(int x, int y, int id) {
  f[++T].y = y, f[T].l = g[x], g[x] = T;
  In[x]++, In[y]++;
  f[++T].y = x, f[T].l = g[y], g[y] = T;
  f[T].enable = f[T - 1].enable = 1;
  f[T].id = f[T - 1].id = id;
}
bool v[N * 2];
int a[N * 2], t, b[N * 2], tt, ans[N];
void Euler(int po) {
  for (int k = g[po]; k; k = f[k].l)
    if (f[k].enable) {
      f[k].enable = f[k ^ 1].enable = 0;
      ans[f[k].id] = (f[k].y > po);
      Euler(f[k].y);
    }
}
int main() {
  T = 1;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%d%d", &z[i].l, &z[i].r);
    z[i].r++;
    store[++tot] = z[i].l, store[++tot] = z[i].r;
  }
  sort(store + 1, store + 1 + tot, cmp);
  disva = 0;
  store[0] = -2;
  for (i = 1; i <= tot; i++)
    if (store[i] != store[i - 1]) {
      s[store[i]] = ++disva;
    }
  for (i = 1; i <= n; i++) z[i].l = s[z[i].l], z[i].r = s[z[i].r];
  m = disva;
  for (i = 1; i <= n; i++) {
    Ins(z[i].l, z[i].r, i);
  }
  for (i = 1; i <= m; i++)
    if (In[i] & 1) {
      b[++tt] = i;
    }
  sort(b + 1, b + 1 + tt, cmp);
  for (i = 1; i <= tt - 1; i += 2) Ins(b[i], b[i + 1], 0);
  for (i = 1; i <= m; i++) {
    Euler(i);
  }
  for (i = 1; i <= n; i++) printf("%d ", ans[i]);
}
