#include <bits/stdc++.h>
using namespace std;
int n, a[200010], b[200010], l, s1[200010], s2[200010], f[200010], x1, y1, ans,
    size[200010];
map<int, int> mp;
inline int gether(int x) { return f[x] ? f[x] = gether(f[x]) : x; }
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  a[n + 1] = 0;
  for (int i = 1; i <= n; i++) a[n + 1] ^= a[i];
  for (int i = 1; i <= n; i++) scanf("%d", &b[i]);
  b[n + 1] = 0;
  for (int i = 1; i <= n; i++) b[n + 1] ^= b[i];
  n++;
  l = 0;
  mp.clear();
  for (int i = 1; i <= n; i++)
    if (!mp[a[i]]) mp[a[i]] = ++l;
  for (int i = 1; i <= n; i++)
    if (!mp[b[i]]) mp[b[i]] = ++l;
  memset(s1, 0, sizeof(s1));
  memset(s2, 0, sizeof(s2));
  for (int i = 1; i <= n; i++) {
    s1[mp[a[i]]]++;
    s2[mp[b[i]]]++;
  }
  for (int i = 1; i <= l; i++)
    if (s1[i] != s2[i]) {
      printf("-1");
      return 0;
    }
  ans = 0;
  if (a[n] != b[n]) ans--;
  memset(f, 0, sizeof(f));
  for (int i = 1; i <= l; i++) size[i] = 1;
  for (int i = 1; i <= n; i++)
    if (a[i] != b[i]) {
      ans++;
      x1 = gether(mp[a[i]]);
      y1 = gether(mp[b[i]]);
      ans++;
      if (x1 != y1) {
        f[y1] = x1;
        size[x1] += size[y1];
        ans--;
      }
    }
  if (size[gether(mp[a[n]])] >= 2) ans--;
  printf("%d", ans);
  return 0;
}
