#include <bits/stdc++.h>
using namespace std;
const int MAXM = 63;
const int MAXN = 200000;
int n;
long long a[MAXN];
bool good[MAXN];
long long d[MAXM][MAXN / 32 + 1];
int p[MAXM + 2], ans[MAXN], pos[MAXN];
bool cmp(const int i, const int j) {
  if (good[i] != good[j]) return good[i];
  return i > j;
}
void xorv(int i, int j) { d[i][j >> 5] ^= 1LL << (j & 31); }
int getv(int i, int j) { return (d[i][j >> 5] >> (j & 31)) & 1; }
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%I64d", a + i);
  for (int i = 0; i < 60; i++) {
    int cnt = 0;
    p[i] = i;
    for (int j = 0; j < n; j++)
      if (a[j] & (1LL << i)) cnt++;
    if (cnt % 2 == 0 && cnt) good[i] = 1;
  }
  sort(p, p + 60, cmp);
  for (int i = 0; i < 60; i++) {
    for (int j = 0; j < n; j++)
      if (a[j] & (1LL << p[i])) xorv(i, j);
    if (good[p[i]]) xorv(i, n);
  }
  int t = (n >> 5);
  for (int i = 0; i < 60; i++) {
    int j = 0;
    for (; !getv(i, j) && j < n; j++)
      ;
    pos[i] = j;
    if (j == n) {
      if (getv(i, n)) xorv(i, n);
      continue;
    }
    for (int k = 0; k < 60; k++)
      if (k != i && getv(k, j))
        for (int q = 0; q <= t; q++) d[k][q] ^= d[i][q];
  }
  for (int i = 0; i < 60; i++) ans[pos[i]] = getv(i, n);
  for (int i = 0; i < n; i++)
    printf("%d%c", (ans[i] ^ 1) + 1, " \n"[i + 1 == n]);
  return 0;
}
