#include <bits/stdc++.h>
using namespace std;
vector<int> ed[401000], odd, cod[401000];
pair<int, int> e[401000];
int pathlen, x, y, n, m, tot, st[401000], pathedge[401000], b[401000],
    path[401000], pr[401000];
bool don[401000], vis[402000];
void dfs(int x) {
  don[x] = true;
  for (int i = 0; i < (int)ed[x].size(); i++) {
    if (vis[cod[x][i]]) continue;
    vis[cod[x][i]] = true;
    dfs(ed[x][i]);
    pathlen++;
    path[pathlen] = x;
    pathedge[pathlen] = cod[x][i];
  }
}
void EulerCircuit() {
  for (int k = 1; k <= tot; k++) {
    if (!don[k]) {
      pathlen = 0;
      dfs(k);
      for (int i = pathlen; i > 1; i--) {
        if (path[i] > path[i - 1])
          pr[pathedge[i]] = 0;
        else
          pr[pathedge[i]] = 1;
      }
      if (path[1] > path[pathlen])
        pr[pathedge[1]] = 0;
      else
        pr[pathedge[1]] = 1;
    }
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &x, &y);
    y++;
    e[i] = make_pair(x, y);
    b[++tot] = x;
    b[++tot] = y;
  }
  sort(&b[1], &b[tot + 1]);
  tot = unique(&b[1], &b[tot + 1]) - &b[1];
  for (int i = 1; i <= n; i++) {
    e[i].first = lower_bound(&b[1], &b[tot + 1], e[i].first) - &b[0];
    e[i].second = lower_bound(&b[1], &b[tot + 1], e[i].second) - &b[0];
  }
  for (int i = 1; i <= n; i++) {
    int x = e[i].first, y = e[i].second;
    ed[x].push_back(y);
    ed[y].push_back(x);
    cod[x].push_back(i);
    cod[y].push_back(i);
  }
  for (int i = 1; i <= tot; i++) {
    if (ed[i].size() % 2) odd.push_back(i);
  }
  int ccc = n;
  for (int i = 1; i < odd.size(); i += 2) {
    ed[odd[i - 1]].push_back(odd[i]);
    ed[odd[i]].push_back(odd[i - 1]);
    cod[odd[i - 1]].push_back(++ccc);
    cod[odd[i]].push_back(ccc);
  }
  EulerCircuit();
  for (int i = 1; i <= n; i++) printf("%d ", pr[i]);
  printf("\n");
  return 0;
}
