#include <bits/stdc++.h>
using namespace std;
int n;
int a[111111], b[111111];
int N;
int A[111111], B[111111];
int n2;
map<int, int> Map;
int h(int x) {
  if (Map.count(x)) return Map[x];
  Map[x] = n2;
  n2++;
  return Map[x];
}
vector<pair<int, int> > e;
int ace[111111];
int ancestor(int x) { return x - ace[x] ? ace[x] = ancestor(ace[x]) : x; }
int stat() {
  for (int i = 0; i < n2; i++) ace[i] = i;
  for (vector<pair<int, int> >::iterator it = e.begin(); it != e.end(); it++)
    ace[ancestor(it->first)] = ace[it->second];
  int res = 0;
  for (int i = 0; i < n2; i++)
    if (ancestor(i) == i) res++;
  return res;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i]);
    a[n] ^= a[i];
  }
  for (int i = 0; i < n; i++) {
    scanf("%d", &b[i]);
    b[n] ^= b[i];
  }
  N = n + 1;
  for (int i = 0; i < N; i++) {
    A[i] = a[i];
    B[i] = b[i];
  }
  sort(A, A + N);
  sort(B, B + N);
  bool flag = true;
  for (int i = 0; i < N; i++)
    if (A[i] != B[i]) flag = false;
  if (!flag) {
    puts("-1");
    return 0;
  }
  for (int i = 0; i < N; i++)
    if (a[i] != b[i]) {
      int t1 = h(a[i]);
      int t2 = h(b[i]);
      e.push_back(make_pair(t1, t2));
    }
  int res = e.size();
  if (a[N - 1] != b[N - 1]) {
    res += stat() - 2;
  } else {
    res += stat();
    if (Map.count(a[N - 1])) res--;
  }
  printf("%d\n", res);
  return 0;
}
