#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n, c, B[N], T[N];
pair<int, int> A[N];
map<int, int> M;
vector<int> Odd;
vector<pair<int, int> > V[N];
void Add(int v, int u, int i) {
  V[v].push_back({u, i});
  V[u].push_back({v, i});
}
void DFS(int v) {
  while (V[v].size()) {
    auto X = V[v].back();
    V[v].pop_back();
    if (T[X.second]) continue;
    T[X.second] = 1 + (v > X.first);
    DFS(X.first);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++)
    scanf("%d%d", &A[i].first, &A[i].second),
        B[i * 2] = A[i].first, B[i * 2 + 1] = A[i].second + 1;
  sort(B, B + 2 * n);
  for (int i = 0; i < 2 * n; i++)
    if (!M.count(B[i])) M[B[i]] = c++;
  for (int i = 0; i < n; i++) Add(M[A[i].first], M[A[i].second + 1], i);
  for (int i = 0; i < c; i++)
    if (V[i].size() & 1) Odd.push_back(i);
  for (int i = 0; i < Odd.size(); i += 2) Add(Odd[i], Odd[i + 1], n + i / 2);
  for (int i = 0; i < c; i++) DFS(i);
  for (int i = 0; i < n; i++, putchar(' ')) putchar(T[i] == 2 ? '1' : '0');
  return (0);
}
