#include <bits/stdc++.h>
using namespace std;
int Read() {
  char c;
  while (c = getchar(), (c != '-') && (c < '0' || c > '9'))
    ;
  bool neg = (c == '-');
  int ret = (neg ? 0 : c - 48);
  while (c = getchar(), c >= '0' && c <= '9') ret = ret * 10 + c - 48;
  return neg ? -ret : ret;
}
const int MAXN = 200005;
pair<int, int> a[MAXN];
int N, n, cnt, m, st[MAXN], b[MAXN], deg[MAXN], odd[MAXN], nxt[MAXN << 2],
    lnk[MAXN << 2], mark[MAXN << 1], vis[MAXN];
void AddEdge(int x, int y) {
  lnk[++cnt] = y, nxt[cnt] = st[x], st[x] = cnt, ++deg[x];
  lnk[++cnt] = x, nxt[cnt] = st[y], st[y] = cnt, ++deg[y];
}
void init() {
  scanf("%d", &N);
  for (int i = 1; i <= N; i++)
    a[i].first = Read(), a[i].second = Read() + 1, b[++n] = a[i].first,
    b[++n] = a[i].second;
  sort(b + 1, b + n + 1), n = unique(b + 1, b + n + 1) - b - 1;
  for (int i = 1; i <= N; i++)
    a[i].first = lower_bound(b + 1, b + n + 1, a[i].first) - b,
    a[i].second = lower_bound(b + 1, b + n + 1, a[i].second) - b;
  for (int i = 1; i <= N; i++) AddEdge(a[i].first, a[i].second);
  for (int i = 1; i <= n; i++)
    if (deg[i] & 1) odd[++m] = i;
  sort(odd + 1, odd + m + 1);
  for (int i = 1; i <= m; i++)
    if (i & 1) AddEdge(odd[i], odd[i + 1]);
}
void DFS(int x) {
  vis[x] = 1;
  for (int i = st[x], y = lnk[i]; i; i = nxt[i], y = lnk[i])
    if (!mark[(i + 1) >> 1]) {
      mark[(i + 1) >> 1] = i;
      DFS(y);
    }
}
void work() {
  for (int i = 1; i <= n; i++)
    if (!vis[i]) DFS(i);
  for (int i = 1; i <= N; i++) printf("%d%c", mark[i] & 1, i < N ? ' ' : '\n');
}
int main() {
  init();
  work();
  return 0;
}
