#include <bits/stdc++.h>
using namespace std;
mt19937_64 rng(
    (unsigned)chrono::system_clock::now().time_since_epoch().count());
const long double PI = acosl(-1);
vector<pair<int, long long int>> info;
int xorGaussian(vector<long long int>& rows, long long int XOR) {
  int r = 0, n = (int)rows.size();
  info.resize(n);
  for (int i = 0; i < n; i++) info[i] = {i, 0ll};
  for (int x = 0; x < 2; x++) {
    for (int c = 63; c >= 0; c--) {
      if (((XOR >> c) & 1) != x) continue;
      int p;
      for (p = r; p < n; p++)
        if (rows[p] & (1LL << (c))) break;
      if (p == n) continue;
      if (p != r) {
        swap(rows[p], rows[r]);
        swap(info[p], info[r]);
      }
      info[r].second |= (1LL << (r));
      for (int i = 0; i < n; i++) {
        if (i != r && (rows[i] & (1LL << (c)))) {
          rows[i] ^= rows[r];
          info[i].second ^= info[r].second;
        }
      }
      r++;
    }
  }
  return r;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  int n;
  cin >> n;
  vector<long long int> input(n);
  long long int XOR = 0;
  for (int i = 0; i < n; i++) {
    cin >> input[i];
    XOR ^= input[i];
  }
  int m = xorGaussian(input, XOR);
  long long int mask = 0;
  for (int i = 0; i < m; i++) {
    mask ^= info[i].second;
  }
  vector<int> ans(n, 1);
  for (int i = 63; i >= 0; i--) {
    if (mask & (1LL << (i))) {
      ans[info[i].first] = 2;
    }
  }
  for (int x : ans) {
    cout << x << " ";
  }
  return 0;
}
