#include <bits/stdc++.h>
using namespace std;
const int maxn = 3e5 + 10;
int n, x, trie[2][31 * maxn], cnt[31 * maxn], a[maxn], tot = 1;
inline void insert(int x) {
  int p = 1, t;
  for (int i = 31; i >= 0; i--) {
    t = (1 << i) & x ? 1 : 0;
    if (!trie[t][p]) trie[t][p] = ++tot;
    p = trie[t][p];
    cnt[p]++;
  }
}
inline int get_max(int x) {
  int p = 1, t, res = 0;
  for (int i = 31; i >= 0; i--) {
    t = (1 << i) & x ? 1 : 0;
    if (trie[t][p] && cnt[trie[t][p]]) {
      p = trie[t][p];
    } else {
      p = trie[t ^ 1][p];
      res |= (1 << i);
    }
    cnt[p]--;
  }
  return res;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &x);
    insert(x);
  }
  for (int i = 1; i <= n; i++) {
    printf("%d%c", get_max(a[i]), i == n ? '\n' : ' ');
  }
  return 0;
}
