//ngqmminh.cl2735
#include <bits/stdc++.h>
#define MOD 1000000007
#define maxn 55
#define Task "BITSWAP"
#define reset(x, i) memset(x,i,sizeof(x))
#define Random(lf, rt) (lf + rand() % (rt - (lf) + 1))
#define PB push_back
#define F first
#define S second
#define vi vector<int>
#define pii pair<int, int>
#define vii vector<pii>
#define sz(x) int(x.size())
#define all(x) x.begin(), x.end()
using namespace std;
typedef long long ll;
typedef long double ld;
int n, L = 0;
ll a[maxn];
int cnt[maxn];
int dp[maxn][65];
int tinh(int l, int r, int u, int v)
{
int lf = max(l, u);
int rt = min(r, v);
if(lf > rt) return 0;
return rt - lf + 1;
}
pair<pii, int> trace[maxn][65];
ll ans[maxn];
int main()
{
ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL);
if(fopen(Task".inp", "r"))
{
freopen(Task".inp", "r", stdin);
freopen(Task".out", "w", stdout);
}
cin >> n;
for (int i = 1; i <= n; i ++){
cin >> a[i];
for (int j = 60; j >= 0; j --)
if ((a[i] >> j) & 1ll){
cnt[i] ++;
L = max(L, j + 1);
}
}
dp[1][cnt[1]] = 1;
trace[1][cnt[1]] = {{cnt[1], 0}, 0};
for (int i = 1; i < n; i ++)
for (int numOne = 0; numOne <= L; numOne ++)
if(dp[i][numOne])
for (int j = 1; j + cnt[i + 1] - 1 <= L; j ++)
{
int tmp = 0;
tmp += tinh(1, numOne, 1, j - 1);
tmp += tinh(1, numOne, j + cnt[i + 1], L);
int cc = tmp;
tmp += tinh(numOne + 1, L, j, j + cnt[i + 1] - 1);
dp[i + 1][tmp] = 1;
trace[i + 1][tmp] = {{tmp - cc, cc}, numOne};
}
if(!dp[n][0])
{
cout << 0;
return 0;
}
vii v;
int x = 0;
for (int i = n; i >= 1; i --)
{
pii tmp = trace[i][x].F;
v.PB(tmp);
x = trace[i][x].S;
}
v.PB({0, 0});
reverse(all(v));
ll cur = 0;
for(int i = 1; i <= n; i ++)
{
vi pos[2];
for (int j = 0; j <= 60; j ++)
{
int tmp = ((cur >> j)&1ll);
pos[tmp].PB(j);
}
int zto = v[i].F;
int otz = v[i].S;
ll tmp = cur;
for (int i : pos[0])
{
if(zto == 0) break;
tmp += (1ll << i);
zto --;
}
for (int i : pos[1])
{
if(otz == 0) break;
tmp -= (1ll << i);
otz --;
}
cout << tmp << " ";
cur ^= tmp;
}
}
Ly9uZ3FtbWluaC5jbDI3MzUKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgTU9EIDEwMDAwMDAwMDcKI2RlZmluZSBtYXhuIDU1CiNkZWZpbmUgVGFzayAiQklUU1dBUCIKI2RlZmluZSByZXNldCh4LCBpKSBtZW1zZXQoeCxpLHNpemVvZih4KSkKI2RlZmluZSBSYW5kb20obGYsIHJ0KSAobGYgKyByYW5kKCkgJSAocnQgLSAobGYpICsgMSkpCiNkZWZpbmUgUEIgcHVzaF9iYWNrCiNkZWZpbmUgRiBmaXJzdAojZGVmaW5lIFMgc2Vjb25kCiNkZWZpbmUgdmkgdmVjdG9yPGludD4KI2RlZmluZSBwaWkgcGFpcjxpbnQsIGludD4KI2RlZmluZSB2aWkgdmVjdG9yPHBpaT4KI2RlZmluZSBzeih4KSBpbnQoeC5zaXplKCkpCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSwgeC5lbmQoKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiBsb25nIGRvdWJsZSBsZDsKaW50IG4sIEwgPSAwOwpsbCBhW21heG5dOwppbnQgY250W21heG5dOwppbnQgZHBbbWF4bl1bNjVdOwppbnQgdGluaChpbnQgbCwgaW50IHIsIGludCB1LCBpbnQgdikKewogICAgaW50IGxmID0gbWF4KGwsIHUpOwogICAgaW50IHJ0ID0gbWluKHIsIHYpOwogICAgaWYobGYgPiBydCkgcmV0dXJuIDA7CiAgICByZXR1cm4gcnQgLSBsZiArIDE7Cn0KcGFpcjxwaWksIGludD4gdHJhY2VbbWF4bl1bNjVdOwpsbCBhbnNbbWF4bl07CmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZShOVUxMKTsgY291dC50aWUoTlVMTCk7CiAgICBpZihmb3BlbihUYXNrIi5pbnAiLCAiciIpKQogICAgewogICAgICAgIGZyZW9wZW4oVGFzayIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihUYXNrIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBjaW4gPj4gbjsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkgKyspewogICAgICAgIGNpbiA+PiBhW2ldOwogICAgICAgIGZvciAoaW50IGogPSA2MDsgaiA+PSAwOyBqIC0tKQogICAgICAgICAgICBpZiAoKGFbaV0gPj4gaikgJiAxbGwpewogICAgICAgICAgICAgICAgICAgIGNudFtpXSArKzsKICAgICAgICAgICAgICAgICAgICBMID0gbWF4KEwsIGogKyAxKTsKICAgICAgICAgICAgfQogICAgfQogICAgZHBbMV1bY250WzFdXSA9IDE7CiAgICB0cmFjZVsxXVtjbnRbMV1dID0ge3tjbnRbMV0sIDB9LCAwfTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSArKykKICAgICAgICBmb3IgKGludCBudW1PbmUgPSAwOyBudW1PbmUgPD0gTDsgbnVtT25lICsrKQogICAgICAgICAgICBpZihkcFtpXVtudW1PbmVdKQogICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogKyBjbnRbaSArIDFdIC0gMSA8PSBMOyBqICsrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGludCB0bXAgPSAwOwogICAgICAgICAgICAgICAgICAgIHRtcCArPSB0aW5oKDEsIG51bU9uZSwgMSwgaiAtIDEpOwogICAgICAgICAgICAgICAgICAgIHRtcCArPSB0aW5oKDEsIG51bU9uZSwgaiArIGNudFtpICsgMV0sIEwpOwogICAgICAgICAgICAgICAgICAgIGludCBjYyA9IHRtcDsKICAgICAgICAgICAgICAgICAgICB0bXAgKz0gdGluaChudW1PbmUgKyAxLCBMLCBqLCBqICsgY250W2kgKyAxXSAtIDEpOwogICAgICAgICAgICAgICAgICAgIGRwW2kgKyAxXVt0bXBdID0gMTsKICAgICAgICAgICAgICAgICAgICB0cmFjZVtpICsgMV1bdG1wXSA9IHt7dG1wIC0gY2MsIGNjfSwgbnVtT25lfTsKICAgICAgICAgICAgICAgIH0KICAgIGlmKCFkcFtuXVswXSkKICAgIHsKICAgICAgICBjb3V0IDw8IDA7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICB2aWkgdjsKICAgIGludCB4ID0gMDsKICAgIGZvciAoaW50IGkgPSBuOyBpID49IDE7IGkgLS0pCiAgICB7CiAgICAgICAgcGlpIHRtcCA9IHRyYWNlW2ldW3hdLkY7CiAgICAgICAgdi5QQih0bXApOwogICAgICAgIHggPSB0cmFjZVtpXVt4XS5TOwogICAgfQogICAgdi5QQih7MCwgMH0pOwogICAgcmV2ZXJzZShhbGwodikpOwogICAgbGwgY3VyID0gMDsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSArKykKICAgIHsKICAgICAgICB2aSBwb3NbMl07CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gNjA7IGogKyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgdG1wID0gKChjdXIgPj4gaikmMWxsKTsKICAgICAgICAgICAgcG9zW3RtcF0uUEIoaik7CiAgICAgICAgfQogICAgICAgIGludCB6dG8gPSB2W2ldLkY7CiAgICAgICAgaW50IG90eiA9IHZbaV0uUzsKICAgICAgICBsbCB0bXAgPSBjdXI7CiAgICAgICAgZm9yIChpbnQgaSA6IHBvc1swXSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKHp0byA9PSAwKSBicmVhazsKICAgICAgICAgICAgdG1wICs9ICgxbGwgPDwgaSk7CiAgICAgICAgICAgIHp0byAtLTsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaSA6IHBvc1sxXSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKG90eiA9PSAwKSBicmVhazsKICAgICAgICAgICAgdG1wIC09ICgxbGwgPDwgaSk7CiAgICAgICAgICAgIG90eiAtLTsKICAgICAgICB9CiAgICAgICAgY291dCA8PCB0bXAgPDwgIiAiOwogICAgICAgIGN1ciBePSB0bXA7CiAgICB9Cn0=