#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
int n, o;
string st;
long long a[maxn], all;
int cc[100], where[100], zhu[100], g[maxn], wc[maxn];
int f[66][maxn];
int main() {
  cin >> n;
  all = 0;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    all ^= a[i];
  }
  st = "";
  for (int i = 1; i <= 63; i++) {
    st = char(all % 2 + 48) + st;
    all /= 2;
  }
  o = 0;
  for (int i = 1; i <= 63; i++)
    if (st[i - 1] == '0') ++o, where[o] = i;
  for (int i = 1; i <= 63; i++)
    if (st[i - 1] == '1') ++o, where[o] = i;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= 63; j++) {
      cc[64 - j] = a[i] % 2;
      a[i] /= 2;
    }
    a[i] = 0;
    for (int j = 1; j <= 63; j++) a[i] = (long long)a[i] * 2 + cc[where[j]];
  }
  memset(f, 0, sizeof(f));
  memset(g, 0, sizeof(g));
  memset(zhu, 0, sizeof(zhu));
  for (int i = 1; i <= 63; i++) {
    for (int j = 1; j <= n; j++) f[i][j] = ((long long)a[j] >> (63 - i)) % 2;
    g[i] = 1;
    for (int j = 1; j < i; j++)
      if ((zhu[j] != -1) && (f[i][zhu[j]] == 1)) {
        for (int k = 1; k <= n; k++) f[i][k] ^= f[j][k];
        g[i] ^= g[j];
      }
    zhu[i] = -1;
    for (int j = 1; j <= n; j++)
      if (f[i][j] == 1) {
        zhu[i] = j;
        break;
      }
    if (zhu[i] == -1) g[i] = 0;
  }
  memset(wc, 0, sizeof(wc));
  for (int i = 63; i >= 1; i--) {
    for (int j = 1; j <= n; j++)
      if (f[i][j] == 1) g[i] ^= wc[j];
    wc[zhu[i]] = g[i];
  }
  for (int i = 1; i <= n; i++) cout << wc[i] + 1 << " ";
  cout << endl;
  return 0;
}
