#include <bits/stdc++.h>
#pragma GCC optimize("-O2")
using namespace std;
void err(istream_iterator<string> it) {}
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " = " << a << endl;
  err(++it, args...);
}
const int LIM = 1e5 + 5, MOD = 1e9 + 7;
long long int y;
int n;
vector<int> ans;
int temp[LIM];
long long int lim = (1LL << 62) - 1;
struct Gaussbase2 {
  int numofbits = 62;
  int rk = 0;
  vector<long long int> Base;
  vector<vector<int> > Units;
  Gaussbase2() {
    Base.assign(numofbits, 0);
    Units.assign(numofbits, vector<int>(0));
  }
  bool canbemade(long long int x, long long int till = lim) {
    vector<long long int> NBase(numofbits, 0);
    for (auto &it : Base)
      if (it) {
        long long int in = it & till;
        for (int i = numofbits - 1; i >= 0; i--) {
          if ((in >> i) & 1) {
            if (!NBase[i]) {
              NBase[i] = in;
              break;
            } else
              in ^= NBase[i];
          }
        }
      }
    for (int i = numofbits - 1; i >= 0; i--) {
      x = min(x, x ^ NBase[i]);
    }
    return x == 0;
  }
  void Add(int indx, long long int x) {
    vector<int> ind;
    for (int i = numofbits - 1; i >= 0; i--) {
      if ((x >> i) & 1) {
        if (!Base[i]) {
          Base[i] = x;
          vector<int> curr;
          temp[indx] ^= 1;
          curr.push_back(indx);
          for (auto &it : ind) {
            for (auto &it1 : Units[it]) curr.push_back(it1), temp[it1] ^= 1;
          }
          for (int j = 0; j < indx + 1; j++)
            if (temp[j]) Units[i].push_back(j);
          for (auto &it : curr) temp[it] ^= 1;
          rk++;
          return;
        } else
          x ^= Base[i], ind.push_back(i);
      }
    }
  }
  void solve(long long int t) {
    long long int sel = 0, till = 0;
    for (int i = numofbits - 1; i >= 0; i--) {
      if (!((t >> i) & 1)) {
        till |= (1LL << i);
        if (canbemade(sel | (1LL << i), till)) sel |= (1LL << i);
      }
    }
    for (int i = numofbits - 1; i >= 0; i--) {
      if ((t >> i) & 1) {
        till |= (1LL << i);
        if (!canbemade(sel, till)) {
          sel |= (1LL << i);
        }
      }
    }
    for (int i = numofbits - 1; i >= 0; i--) {
      if (sel > (sel ^ Base[i])) {
        sel ^= Base[i];
        for (auto &it : Units[i]) {
          ans[it] ^= 1;
        }
      }
    }
  }
};
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  Gaussbase2 g;
  cin >> n;
  long long int txor = 0;
  for (int i = 0; i < n; i++) {
    cin >> y;
    txor ^= y;
    if (!g.canbemade(y)) g.Add(i, y);
  }
  ans.assign(n, 1);
  g.solve(txor);
  for (auto &it : ans) {
    cout << it + 1 << " ";
  }
  return 0;
}
