#include <bits/stdc++.h>
using namespace std;
int cnt[69], ans[100009], imp[100009];
unsigned long long c[100009];
vector<int> b;
vector<bitset<100009> > a;
int n;
int read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
void add(bitset<100009> A, int B) {
  int m = a.size();
  for (int i = 0; i <= m - 1; i++)
    if (A[imp[i]]) A ^= a[i], B ^= b[i];
  int id = -1;
  for (int i = 0; i <= n - 1; i++)
    if (A[i]) {
      id = i;
      break;
    }
  if (id == -1) return;
  imp[m] = id;
  for (int i = 0; i <= m - 1; i++)
    if (a[i][id]) a[i] ^= A, b[i] ^= B;
  a.push_back(A);
  b.push_back(B);
}
int main() {
  n = read();
  for (int i = 0; i <= n - 1; i++) scanf("%llu", &c[i]);
  for (int o = 62; o >= 0; o--)
    for (int j = 0; j <= n - 1; j++) cnt[o] += (c[j] >> o) & 1;
  for (int o = 62; o >= 0; o--)
    if (cnt[o] && ((cnt[o] & 1) == 0)) {
      bitset<100009> t;
      t.reset();
      for (int i = 0; i <= n - 1; i++) t[i] = (c[i] >> o) & 1;
      add(t, 1);
    }
  for (int o = 62; o >= 0; o--)
    if (cnt[o] && (cnt[o] & 1)) {
      bitset<100009> t;
      t.reset();
      for (int i = 0; i <= n - 1; i++) t[i] = (c[i] >> o) & 1;
      add(t, 0);
    }
  int m = b.size();
  for (int i = 0; i <= m - 1; i++) ans[imp[i]] = b[i];
  for (int i = 0; i <= n - 2; i++) printf("%d ", 2 - ans[i]);
  printf("%d\n", 2 - ans[n - 1]);
  return 0;
}
