#include <bits/stdc++.h>
using namespace std;
const int maxn = 2 * 100005;
bool vis[maxn], par[maxn];
vector<int> edge[maxn];
pair<int, int> seg[maxn];
int n;
void add(int a, int b) { edge[a].push_back(b), edge[b].push_back(a); }
void dfs(int x, int cur) {
  if (vis[x]) return;
  vis[x] = true;
  par[x] = cur;
  for (int i = 0; i < edge[x].size(); i++) dfs(edge[x][i], cur ^ 1);
}
int main() {
  scanf("%d", &n);
  for (int i = 0, l, r; i < n; i++) {
    scanf("%d%d", &l, &r);
    add(i * 2, i * 2 + 1);
    seg[i * 2] = make_pair(l, i * 2);
    seg[i * 2 + 1] = make_pair(r + 1, i * 2 + 1);
  }
  sort(seg, seg + 2 * n);
  for (int i = 0; i < n; i++) {
    add(seg[i * 2].second, seg[i * 2 + 1].second);
  }
  memset(vis, false, sizeof(vis));
  memset(par, 0, sizeof(par));
  for (int i = 0; i < 2 * n; i++)
    if (!vis[i]) dfs(i, 0);
  for (int i = 0; i < n; i++) printf("%d ", par[i * 2]);
  printf("\n");
  return 0;
}
