#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0;
  bool t = false;
  char ch = getchar();
  while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
  if (ch == '-') t = true, ch = getchar();
  while (ch <= '9' && ch >= '0') x = x * 10 + ch - 48, ch = getchar();
  return t ? -x : x;
}
int n, L[400100], R[400100];
int S[400100], top;
struct Line {
  int v, next;
} e[400100];
int h[400100], cnt = 2, dg[400100];
inline void Add(int u, int v) {
  e[cnt] = (Line){v, h[u]};
  h[u] = cnt++;
  dg[v] += 1;
}
int vis[400100];
bool book[400100];
void dfs(int u) {
  for (int &i = h[u]; i; i = e[i].next) {
    int v = e[i].v, j = i;
    if (book[i >> 1]) continue;
    book[i >> 1] = true;
    dfs(v);
    vis[j >> 1] = u < v;
  }
}
int main() {
  n = read();
  for (int i = 1; i <= n; ++i) L[i] = read(), R[i] = read();
  for (int i = 1; i <= n; ++i) S[++top] = L[i], S[++top] = L[i] - 1;
  for (int i = 1; i <= n; ++i) S[++top] = R[i], S[++top] = R[i] + 1;
  sort(&S[1], &S[top + 1]);
  top = unique(&S[1], &S[top + 1]) - S - 1;
  for (int i = 1; i <= n; ++i) L[i] = lower_bound(&S[1], &S[top + 1], L[i]) - S;
  for (int i = 1; i <= n; ++i) R[i] = lower_bound(&S[1], &S[top + 1], R[i]) - S;
  for (int i = 1; i <= n; ++i) Add(L[i], R[i] + 1), Add(R[i] + 1, L[i]);
  for (int i = 1, lst = 0; i <= top; ++i)
    if (dg[i] & 1) lst ? Add(i, lst), Add(lst, i), lst = 0 : lst = i;
  for (int i = 2; i < cnt; i += 2)
    if (!book[i >> 1]) dfs(e[i].v);
  for (int i = 1; i <= n; ++i) printf("%d ", vis[i]);
  return 0;
}
