#include <bits/stdc++.h>
using namespace std;
int n, l[100015], r[100015], o[100015 << 1], tot, cnt, ans[100015],
    ind[100015 << 1], head[100015 << 1];
struct edge {
  int to, next, w;
  edge() {}
  edge(int u, int v, int x) {
    to = u;
    next = v;
    w = x;
  }
} e[100015 << 2];
bool vis[100015 << 2], gkp[100015 << 2];
void add(int u, int v, int w) {
  e[++cnt] = edge(v, head[u], w);
  head[u] = cnt;
}
void dfs(int u) {
  gkp[u] = 1;
  for (int i = head[u]; ~i; i = e[i].next) {
    int v = e[i].to;
    if (vis[i]) continue;
    vis[i] = vis[i ^ 1] = 1;
    ans[e[i].w] = (u < v);
    dfs(v);
  }
}
int main() {
  memset(head, -1, sizeof head);
  scanf("%d", &n);
  cnt = -1;
  for (int i = 1; i <= n; i++)
    scanf("%d%d", &l[i], &r[i]), ++r[i], o[++tot] = l[i], o[++tot] = r[i];
  sort(o + 1, o + tot + 1);
  int m = unique(o + 1, o + tot + 1) - o - 1;
  for (int i = 1; i <= n; i++) {
    l[i] = lower_bound(o + 1, o + m + 1, l[i]) - o;
    r[i] = lower_bound(o + 1, o + m + 1, r[i]) - o;
    add(l[i], r[i], i);
    add(r[i], l[i], i);
    ind[l[i]]++;
    ind[r[i]]++;
  }
  int last = 0;
  for (int i = 1; i <= m; i++) {
    if (ind[i] & 1) {
      if (last)
        add(i, last, 0), add(last, i, 0), last = 0;
      else
        last = i;
    }
  }
  for (int i = 1; i <= m; i++)
    if (gkp[i] == 0) dfs(i);
  for (int i = 1; i <= n; i++) printf("%d ", ans[i]);
  return 0;
}
