#include <bits/stdc++.h>
using namespace std;
const int N = 510000;
struct node {
  int to, next, id;
} a[N * 2];
int n, l[N], r[N], x[N], ls[N], tot = 1, ans[N], in[N], cnt;
bool V[N], v[N];
void addl(int x, int y, int id) {
  a[++tot].to = y;
  a[tot].next = ls[x];
  a[tot].id = id;
  ls[x] = tot;
  in[y]++;
}
void dfs(int x) {
  V[x] = 1;
  for (int i = ls[x]; i; i = a[i].next) {
    if (v[i]) continue;
    int y = a[i].to;
    v[i] = v[i ^ 1] = 1;
    dfs(y);
    ans[a[i].id] = (x < a[i].to);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &l[i], &r[i]);
    r[i]++;
    x[++cnt] = l[i];
    x[++cnt] = r[i];
  }
  sort(x + 1, x + 1 + cnt);
  cnt = unique(x + 1, x + 1 + cnt) - x - 1;
  for (int i = 1; i <= n; i++) {
    l[i] = lower_bound(x + 1, x + 1 + cnt, l[i]) - x;
    r[i] = lower_bound(x + 1, x + 1 + cnt, r[i]) - x;
    addl(l[i], r[i], i);
    addl(r[i], l[i], i);
  }
  int last = 0;
  for (int i = 1; i <= cnt; i++)
    if (in[i] & 1) {
      if (last)
        addl(last, i, 0), addl(i, last, 0), last = 0;
      else
        last = i;
    }
  for (int i = 1; i <= cnt; i++)
    if (!V[i]) dfs(i);
  for (int i = 1; i <= n; i++) printf("%d ", ans[i]);
}
