#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n, sz, a[N], b[N];
vector<int> adj[N];
bool vis[N];
void dfs(int u) {
  if (vis[u]) return;
  vis[u] = true;
  for (int v : adj[u]) dfs(v);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  vector<int> coord;
  for (int i = 0; i < (int)(n); i++) {
    cin >> a[i];
    a[n] ^= a[i];
  }
  for (int i = 0; i < (int)(n); i++) {
    cin >> b[i];
    b[n] ^= b[i];
  }
  for (int i = 0; i < (int)(n + 1); i++)
    if (a[i] != b[i]) coord.push_back(a[i]);
  map<int, int> cnt;
  for (int i = 0; i < (int)(n + 1); i++) {
    cnt[a[i]]++;
    cnt[b[i]]--;
  }
  bool ok = true;
  for (auto xy : cnt) ok &= xy.second == 0;
  if (ok) {
    sort((coord).begin(), (coord).end());
    coord.erase(unique((coord).begin(), (coord).end()), coord.end());
    sz = ((int)(coord).size());
    int ans = 0;
    for (int i = 0; i < (int)(n + 1); i++)
      if (i == n || a[i] != b[i]) {
        ans++;
        int u =
            lower_bound((coord).begin(), (coord).end(), a[i]) - coord.begin();
        int v =
            lower_bound((coord).begin(), (coord).end(), b[i]) - coord.begin();
        adj[u].push_back(v);
        adj[v].push_back(u);
      }
    int s = lower_bound((coord).begin(), (coord).end(), a[n]) - coord.begin();
    dfs(s);
    ans--;
    for (int u = 0; u < (int)(sz); u++)
      if (!vis[u]) {
        dfs(u);
        ans++;
      }
    cout << ans << endl;
  } else {
    cout << -1 << endl;
  }
  return 0;
}
