#include <bits/stdc++.h>
using namespace std;
const int N = 400050;
int a[N], b[N], w[N], Id, d[N], nn[N][2], o[N], head[N], top, tot, bl[N], cnt,
    vis[N], st[N], bj[N];
void dfs(int x) {
  vis[x] = 1;
  for (int i = head[x], y; i; i = nn[i][0])
    if (!bj[bl[i]]) {
      bj[bl[i]] = 1, dfs(y = nn[i][1]);
      if (x < y)
        w[bl[i]] = 0;
      else
        w[bl[i]] = 1;
    }
  return;
}
int main() {
  int n, u, v;
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    scanf("%d%d", &u, &v), o[++top] = u * 2, o[++top] = v * 2 + 1;
    a[i] = u * 2, b[i] = v * 2 + 1;
  }
  sort(o + 1, o + top + 1);
  top = unique(o + 1, o + top + 1) - o - 1;
  for (int i = 1; i <= n; ++i) {
    a[i] = lower_bound(o + 1, o + top + 1, a[i]) - o;
    b[i] = lower_bound(o + 1, o + top + 1, b[i]) - o;
    (nn[++cnt][1] = b[i], nn[cnt][0] = head[a[i]], head[a[i]] = cnt,
     bl[cnt] = i),
        (nn[++cnt][1] = a[i], nn[cnt][0] = head[b[i]], head[b[i]] = cnt,
         bl[cnt] = i),
        ++d[a[i]], ++d[b[i]];
  }
  Id = n;
  for (int i = 1; i <= top; ++i)
    if (d[i] & 1) o[++tot] = i;
  for (int i = 2; i <= tot; i += 2)
    ++Id,
        (nn[++cnt][1] = o[i - 1], nn[cnt][0] = head[o[i]], head[o[i]] = cnt,
         bl[cnt] = Id),
        (nn[++cnt][1] = o[i], nn[cnt][0] = head[o[i - 1]], head[o[i - 1]] = cnt,
         bl[cnt] = Id);
  for (int i = 1; i <= top; ++i)
    if (!vis[i]) dfs(i);
  for (int i = 1; i <= n; ++i) printf("%d ", w[i]);
  return 0;
}
