#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0;
  bool t = false;
  char ch = getchar();
  while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
  if (ch == '-') t = true, ch = getchar();
  while (ch <= '9' && ch >= '0') x = x * 10 + ch - 48, ch = getchar();
  return t ? -x : x;
}
map<int, int> M;
multiset<int> S;
int f[100100], tot;
int getf(int x) { return x == f[x] ? x : f[x] = getf(f[x]); }
int ID(int x) { return M[x] ? M[x] : M[x] = ++tot; }
int n, a[100100], b[100100], ans = -1;
int main() {
  n = read();
  for (int i = 1; i <= n; ++i) a[i] = read(), S.insert(a[i]), a[n + 1] ^= a[i];
  for (int i = 1; i <= n; ++i) b[i] = read(), b[n + 1] ^= b[i];
  S.insert(a[n + 1]);
  for (int i = 1; i <= n; ++i)
    if (S.find(b[i]) == S.end()) {
      puts("-1");
      return 0;
    } else
      S.erase(S.find(b[i]));
  for (int i = 1; i <= n + 1; ++i) f[i] = i;
  for (int i = 1; i <= n; ++i)
    if (a[i] != b[i]) {
      int u = ID(a[i]), v = ID(b[i]);
      f[getf(u)] = getf(v);
      ++ans;
    }
  for (int i = 1; i <= tot; ++i)
    if (getf(i) == i) ++ans;
  bool fl = true;
  for (int i = 1; i <= n; ++i)
    if (b[i] == a[n + 1]) fl = false;
  ans += fl;
  printf("%d\n", ans);
  return 0;
}
