#include <bits/stdc++.h>
using namespace std;
const int N = 110000;
int n, i, j, tot, ans[N];
long long a[N], c[60];
bool p[N];
bitset<N> x, q[66];
void work() {
  for (int i = 1, j = 1, k = 1; i <= tot;) {
    while (!x[k] && k <= n) k++;
    if (k > n) break;
    while (!q[i][j] && j <= n) j++;
    while (j < k) {
      while (!q[i][j] && j <= n) j++;
      if (j >= k) break;
      i++;
    }
    if (j > k) break;
    x ^= q[i];
    i++;
  }
  if (!x.count()) return;
  int k = 1;
  while (!x[k] && k <= n) k++;
  for (int i = 1, j = 1; i <= tot; i++) {
    while (!q[i][j] && j <= n) j++;
    if (j > k && q[i] != x) {
      for (int t = ++tot; t > i; t--) q[t] = q[t - 1];
      q[i] = x;
      return;
    }
  }
  q[++tot] = x;
  return;
}
void solve() {
  for (int i = tot; i; i--) {
    for (int j = 1; j <= n; j++)
      if (ans[j] != -1 && q[i][j]) {
        q[i][0] = q[i][0] ^ ans[j];
        q[i][j] = 0;
      }
    if (q[i][0])
      for (int j = 1; j <= n; j++)
        if (q[i][j]) {
          ans[j] = 1;
          q[i][j] = 0;
          break;
        }
    for (int j = 1; j <= n; j++)
      if (q[i][j]) ans[j] = 0;
  }
  for (int i = 1; i <= n; i++)
    if (ans[i] == -1) ans[i] = 1;
}
int main() {
  scanf("%d", &n);
  for (i = 1; i <= n; i++) scanf("%lld", &a[i]);
  for (i = 2, c[1] = 1; i <= 60; i++) c[i] = c[i - 1] * 2;
  for (i = 60; i >= 1; i--) {
    for (j = 1; j <= n; j++)
      if ((a[j] & c[i]))
        x[j] = 1;
      else
        x[j] = 0;
    x[0] = 1;
    int num = x.count();
    if (num == 1 || !(num & 1)) continue;
    work();
  }
  for (i = 60; i >= 0; i--) {
    for (j = 1; j <= n; j++)
      if (a[j] & c[i])
        x[j] = 1;
      else
        x[j] = 0;
    x[0] = 1;
    int num = x.count();
    if (!(num & 1)) work();
  }
  memset(ans, 255, sizeof(ans));
  solve();
  for (i = 1; i <= n; i++) printf("%d ", ans[i] + 1);
  return 0;
}
