#include <bits/stdc++.h>
using namespace std;
long long Read() {
  char c;
  while (c = getchar(), (c != '-') && (c < '0' || c > '9'))
    ;
  bool neg = (c == '-');
  long long ret = (neg ? 0 : c - 48);
  while (c = getchar(), c >= '0' && c <= '9') ret = ret * 10 + c - 48;
  return neg ? -ret : ret;
}
const int MAXN = 100005;
int N, n, ord[MAXN], bit[65];
long long sum, mask, a[MAXN], b[MAXN];
bool out[MAXN];
void init() {
  scanf("%d", &N);
  for (int i = 1; i <= N; i++) a[i] = Read(), ord[i] = i, sum ^= a[i];
}
void work() {
  for (int cb = 0; cb <= 1; cb++)
    for (int d = 60; d >= 0; d--)
      if (((((sum) >> (d)) & 1)) == cb) {
        bool has = 0;
        for (int i = n + 1; i <= N; i++)
          if (((((a[ord[i]]) >> (d)) & 1)) == 1) {
            swap(ord[n + 1], ord[i]);
            has = 1;
            break;
          }
        if (!has) continue;
        bit[++n] = d, b[ord[n]] |= (1LL << n);
        for (int i = n + 1; i <= N; i++)
          if (((((a[ord[i]]) >> (d)) & 1)) == 1)
            a[ord[i]] ^= a[ord[n]], b[ord[i]] ^= b[ord[n]];
      }
  sum = 0;
  for (int i = 1; i <= n; i++)
    if (((((sum) >> (bit[i])) & 1)) == 0) mask ^= b[ord[i]], sum ^= a[ord[i]];
  for (int i = 1; i <= n; i++) out[ord[i]] = ((((mask) >> (i)) & 1));
  for (int i = 1; i <= N; i++) printf("%d%c", out[i] + 1, i < N ? ' ' : '\n');
}
int main() {
  init();
  work();
  return 0;
}
