#include <bits/stdc++.h>
using namespace std;

#define fio                           \
	ios_base::sync_with_stdio(false); \
	cin.tie(NULL);                    \
	cout.tie(NULL);
#define ll long long
#define ull unsigned long long
#define ld long double
#define endl "\n"
#define ff first
#define ss second
#define pi pair<ll, ll>
#define PI 3.141592653589793238462643383279502884L
#define mp make_pair
#define pb push_back
#define fall(i, a, b) for (int i = a; i < b; i++)
#define sz(x) (ll) x.size()
#define all(x) x.begin(), x.end()
#define ed cout << "ed";
ll MOD = 1e9 + 7;
ll MOD1 = 1e9 + 123;
ll MOD2 = 1e9 + 321;
// ll mod(ll a, ll m)
// {
//     if (a == 0)
//         return 0;
//     else
//         return (a % m + m) % m;
// }
// int mod(string num, int a)
// {

//     int res = 0;

//     for (int i = 0; i < num.length(); i++)
//         res = (res * 10 + (int)num[i] - '0') % a;

//     return res;
// }

// ll d, x, y;
// void extendedEuclid(int A, int B)
// {
//     if (B == 0)
//     {
//         d = A;
//         x = 1;
//         y = 0;
//     }
//     else
//     {
//         extendedEuclid(B, A % B);
//         int temp = x;
//         x = y;
//         y = temp - (A / B) * y;
//     }
// }

// ll modInverse(int A, int M)
// {
//     extendedEuclid(A, M);
//     return (x % M + M) % M;
// }

// // Generate random base in (before, after) open interval:
// int gen_base(const int before, const int after)
// {
//     auto seed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
//     std::mt19937 mt_rand(seed);
//     int base = std::uniform_int_distribution<int>(before + 1, after)(mt_rand);
//     return base % 2 == 0 ? base - 1 : base;
// }

ll poow(ll a, ll b, ll m)
{
	if (b == 0)
		return 1;
	else if (b % 2 == 0)
		return ((ll)poow((a % m) * (a % m), b / 2, m) % m);
	else
		return ((a % m) * ((ll)poow((a % m) * (a % m), b / 2, m) % m)) % m;
}
// vector<int> rabin_karp(string const &t, string const &s) //string ,pattern
// {
//     const ll p1 = gen_base(3597, MOD1);
//     const ll p2 = gen_base(3597, MOD2);
//     const ll m1 = MOD1;
//     const ll m2 = MOD2;
//     ll S = s.size(), T = t.size();
//     vector<long long> p_pow1(max(S, T)), p_pow2(max(S, T));
//     p_pow1[0] = 1;
//     p_pow2[0] = 1;
//     for (int i = 1; i < (int)p_pow1.size(); i++)
//     {
//         p_pow1[i] = (p_pow1[i - 1] * p1) % m1;
//         p_pow2[i] = (p_pow2[i - 1] * p2) % m2;
//     }

//     vector<long long> h1(T + 1, 0), h2(T + 1, 0);
//     for (int i = 0; i < T; i++)
//     {
//         h1[i + 1] = (h1[i] + (t[i]) * p_pow1[i]) % m1;
//         h2[i + 1] = (h2[i] + (t[i]) * p_pow2[i]) % m2;
//     }
//     long long h_s1 = 0, h_s2 = 0;
//     for (int i = 0; i < S; i++)
//     {
//         h_s1 = (h_s1 + (s[i]) * p_pow1[i]) % m1;
//         h_s2 = (h_s2 + (s[i]) * p_pow2[i]) % m2;
//     }

//     vector<int> occurences;
//     for (int i = 0; i + S - 1 < T; i++)
//     {
//         long long cur_h1 = (h1[i + S] + m1 - h1[i]) % m1;
//         long long cur_h2 = (h2[i + S] + m2 - h2[i]) % m2;
//         if (cur_h1 == h_s1 * p_pow1[i] % m1 && cur_h2 == h_s2 * p_pow2[i] % m2)
//             occurences.push_back(i);
//     }
//     return occurences;
// }

// vector<int> G[1000000];
// vector<int> L(1000000, 0);
// vector<int> vis(1000000, 0);
// void dfs(ll y, ll c)
// {
// 	vis[y] = c;

// 	for (auto h : G[y])
// 	{
// 		if (vis[h] == 0)
// 			dfs(h, c);
// 	}
// }
// void bfs(int y)
// {
// 	queue<int> q;
// 	q.push(y);
// 	vis[y] = 1;
// 	L[y] = 0;
// 	while (!q.empty())
// 	{
// 		int c = q.front();
// 		q.pop();
// 		for (auto h : G[c])
// 			if (vis[h] == 0)
// 			{
// 				q.push(h);
// 				L[h] = L[c] + 1;
// 				vis[h] = 1;
// 			}
// 	}
// }
// bool is_bipartite(ll y, ll d)
// {
//     vis[y] = true;
//     L[y] = d;
//     for (auto h : G[y])

//         if (vis[h] == false)
//             return is_bipartite(h, 1 ^ d);
//         else if (L[h] == d)
//             return false;
//     return true;
// }
// bool compa(string a, string b)
// {
// 	if (a.length() <= b.length())
// 		return true;
// 	else
// 		return false;
// }

// int timer = 0;
// vector<int> in(1000000, 0);
// vector<pair<int, int>> bri;
// void Bridges(ll y, ll p)
// {
// 	vis[y] = 1;
// 	in[y] = L[y] = timer;
// 	timer++;
// 	for (auto h : G[y])
// 	{
// 		if (h == p)
// 			continue;
// 		else if (vis[h] == 1)

// 			L[y] = min(L[y], in[h]);

// 		else
// 		{
// 			Bridges(h, y);
// 			if (L[h] > in[y])
// 			{

// 				bri.pb({y, h});
// 			}
// 			L[y] = min(L[y], L[h]);
// 		}
// 	}
// }

// void Direct(ll y, ll p)
// {
// 	vis[y] = 1;
// 	in[y] = timer++;
// 	for (auto h : G[y])
// 	{
// 		if (h == p)
// 			continue;
// 		else if (vis[h] == 0)
// 		{
// 			Direct(h, y);
// 			cout << y << " " << h << endl;
// 		}

// 		else if (in[h] > in[y])
// 			cout << h << " " << y << endl;
// 	}
// }
// int F(int n, int k)
// {
// 	int p, c;
// 	if(n==0)return 0;
// 	if (n < 2 * k)
// 		return 1;
// 	else
// 	{
// 		p = 0;
// 		c = 0;
// 		while (c < n)
// 			c += k + 1, p++;

// 		return p;
// 	}
// }
int D(int n)
{
	int f = n;
	for (int i = 2; i * i <= n; i++)
	{
		if (n % i == 0)
		{
			if (i % 2 != 0)
				f = min(i, f);
			if ((n / i) % 2 != 0)
				f = min(n / i, f);
		}
	}
	if (f == n)
		return 1;
	return f;
}

int fun(int n, int p = 1)
{
	cout << n << " " << p << endl;
	if (n == 1)
		return p ^ 1;
	else if (n % 2 != 0)
		return p;
	else
	{
		int t = D(n);
		if (t != 1)
			return fun(n / D(n), p ^ 1);
		else
			return fun(n - 1, p ^ 1);
	}
}

void de(ull n)
{

	string s = "";
	char cf[26];
	int i;
	for (i = 1; i < 26; i++)
		cf[i] = (char)(97 + i - 1);
	cf[0] = 'z';
	i = 0;
	if (n <= 26)
		cout << cf[n % 26];
	else
	{
		while (n > 0)
		{

			ull temp = 0;

			temp = n % 26;

			s += cf[temp];

			n = n / 26;
		}

		for (i = s.length() - 2; i >= 0; i--)
			cout << s[i];
	}
}
int main()
{
	fio;
	ll t, a, n, q, k, i, m, c, u, f, j, p, r, x, y, s, b, d;

	// Sieve
	//   p= 1000000;
	// bool ar[p];

	//       for (i = 2; i <= p; i += 1)
	//          ar[i] = true;
	//       ar[0] = false;
	//       ar[1] = false;

	//       for (i = 2; i * i <= p; i += 1)
	//       {
	//          if (ar[i] == true)
	//             for (j = i * i; j <= p; j += i)
	//                ar[j] = false;
	//       }
	cin >> n;
	vector<int> v(n, 0);
	x = 0;
	for (i = 0; i < n; i++)
		{cin >> v[i]; x = x ^ v[i];}
	for (i = 0; i < n; i++)
		cout << (x^v[i]) << " ";
	return 0;
}


Measured memory_bytes: 3968