#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3e5 + 5;
struct P {
  int cnt = 0;
  int lnk[2];
  P() { lnk[0] = lnk[1] = -1; }
};
int n, sz = 1;
int a[MAXN];
P bor[30 * MAXN];
void add(int v, int x, int d) {
  P &t = bor[v];
  t.cnt++;
  if (d == -1) return;
  int q = ((x & (1 << d)) != 0);
  if (t.lnk[q] == -1) t.lnk[q] = sz++;
  add(t.lnk[q], x, d - 1);
}
int get_cnt(int v) {
  if (v == -1) return 0;
  return bor[v].cnt;
}
int get(int v, int x, int d) {
  P &t = bor[v];
  t.cnt--;
  if (d == -1) return 0;
  int q = ((x & (1 << d)) != 0);
  if (get_cnt(t.lnk[q]) > 0)
    return get(t.lnk[q], x, d - 1) + (q << d);
  else
    return get(t.lnk[1 - q], x, d - 1) + ((1 - q) << d);
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) cin >> a[i];
  for (int i = 0; i < n; i++) {
    int p;
    cin >> p;
    add(0, p, 29);
  }
  for (int i = 0; i < n; i++) cout << (get(0, a[i], 29) ^ a[i]) << " ";
  return 0;
}
