#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, px[100005], py[100005], ans[100005], deg[200005], vis[200005],
    vis2[400005];
vector<int> all;
vector<pair<int, int> > e[200005];
void dfs(int x) {
  vis[x] = 1;
  while (!e[x].empty()) {
    if (vis2[e[x].back().second]) {
      e[x].pop_back();
      continue;
    }
    if (e[x].back().second <= n)
      ans[e[x].back().second] = (x < e[x].back().first);
    vis2[e[x].back().second] = 1;
    int t = e[x].back().first;
    e[x].pop_back();
    dfs(t);
  }
}
int main() {
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%d%d", &px[i], &py[i]);
    py[i]++;
    all.push_back(px[i]);
    all.push_back(py[i]);
  }
  sort(all.begin(), all.end());
  all.resize(unique(all.begin(), all.end()) - all.begin());
  for (i = 1; i <= n; i++) {
    px[i] = upper_bound(all.begin(), all.end(), px[i]) - all.begin();
    py[i] = upper_bound(all.begin(), all.end(), py[i]) - all.begin();
    e[px[i]].push_back(make_pair(py[i], i));
    e[py[i]].push_back(make_pair(px[i], i));
    deg[px[i]]++;
    deg[py[i]]++;
  }
  int lst = 0, tt = n;
  for (i = 1; i <= all.size(); i++)
    if (deg[i] & 1) {
      if (lst) {
        e[lst].push_back(make_pair(i, ++tt));
        e[i].push_back(make_pair(lst, tt));
        lst = 0;
      } else
        lst = i;
    }
  for (i = 1; i <= all.size(); i++)
    if (!vis[i]) dfs(i);
  for (i = 1; i <= n; i++) {
    putchar(ans[i] | 48);
    putchar(' ');
  }
  return 0;
}
