#include <bits/stdc++.h>
using namespace std;
int A[100001], B[100000];
map<int, int> fra;
map<int, vector<int> > b;
bool vis[100001], g[100001];
int go(int v) {
  if (vis[v]) return 0;
  vis[v] = true;
  vector<int> &vc = b[A[v]];
  int an = 1;
  for (int i = 0; i < (int)(vc.size()); ++i) an += go(vc[i]);
  return an;
}
int main() {
  int n;
  scanf("%d", &n);
  int x = 0;
  for (int i = 0; i < (int)(n); ++i) scanf("%d", A + i), x ^= A[i], ++fra[A[i]];
  A[n] = x;
  int ok = 0, x2 = 0;
  for (int i = 0; i < (int)(n); ++i) {
    scanf("%d", B + i);
    x2 ^= B[i];
    if (B[i] == A[i])
      ++ok, --fra[A[i]], g[i] = true;
    else
      b[B[i]].push_back(i);
  }
  b[x2].push_back(n);
  ++fra[x];
  for (map<int, vector<int> >::iterator it = b.begin(); it != b.end(); ++it)
    if (fra[it->first] != (int)it->second.size()) {
      printf("-1\n");
      return 0;
    }
  int an = go(n) - 1;
  for (int i = 0; i < (int)(n); ++i)
    if (!g[i] && !vis[i]) an += go(i) + 1;
  printf("%d\n", an);
}
