#include <bits/stdc++.h>
using namespace std;
long long x, y, z[3 * 100005], rez[3 * 100005];
struct Trie {
  long long arr[5];
  Trie *tar[5];
  Trie() {
    memset(arr, 0, sizeof arr);
    memset(tar, 0, sizeof tar);
  }
  void add(string &s, long long indx) {
    if (indx == 31) {
      return;
    }
    long long ss = s[indx] - '0';
    arr[ss]++;
    if (!tar[ss]) {
      tar[ss] = new Trie();
    }
    tar[ss]->add(s, indx + 1);
  }
  long long getAns(string &s, long long indx) {
    if (indx == 31) {
      return 0;
    }
    long long ss = s[indx] - '0';
    if (arr[ss]) {
      arr[ss]--;
      return tar[ss]->getAns(s, indx + 1);
    }
    arr[(1 - ss)]--;
    return (1 << (30 - indx)) + tar[(1 - ss)]->getAns(s, indx + 1);
  }
};
string rec(long long ss) {
  string re;
  while (ss) {
    if (ss % 2) {
      re += '1';
    } else {
      re += '0';
    }
    ss /= 2;
  }
  while (re.size() < 31) {
    re += '0';
  }
  reverse(re.begin(), re.end());
  return re;
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  ;
  cin >> x;
  Trie ans;
  for (int i = 0; i < x; i++) {
    cin >> z[i];
  }
  for (int i = 0; i < x; i++) {
    cin >> rez[i];
    string s = rec(rez[i]);
    ans.add(s, 0);
  }
  for (int i = 0; i < x; i++) {
    string s = rec(z[i]);
    cout << ans.getAns(s, 0) << " ";
  }
  cout << endl;
  return 0;
}
