#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int a[N], b[N], f[N];
map<int, int> mp;
int tot = 0;
int find(int x) { return f[x] == x ? x : f[x] = find(f[x]); }
void mg(int x, int y) {
  int fx = find(x), fy = find(y);
  if (fx != fy) f[fy] = fx;
}
int c[N], d[N];
bool check(int n) {
  memcpy(c, a, sizeof(c)), memcpy(d, b, sizeof(b));
  sort(c + 1, c + n + 1), sort(d + 1, d + n + 1);
  for (int i = 1; i <= n; ++i)
    if (c[i] != d[i]) return false;
  return true;
}
int main() {
  int n, ans = 0;
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d", &a[i]), a[n + 1] ^= a[i];
  for (int i = 1; i <= n; ++i) scanf("%d", &b[i]), b[n + 1] ^= b[i];
  n++;
  for (int i = 1; i <= n; ++i)
    if (a[i] != b[i]) {
      ans += i < n;
      if (!mp[a[i]]) mp[a[i]] = ++tot;
      if (!mp[b[i]]) mp[b[i]] = ++tot;
    }
  if (!mp[a[n + 1]]) mp[a[n + 1]] = ++tot;
  if (!check(n)) return printf("-1"), 0;
  for (int i = 1; i <= tot; ++i) f[i] = i;
  for (int i = 1; i <= n; ++i)
    if (a[i] != b[i]) mg(mp[a[i]], mp[b[i]]);
  for (int i = 1; i <= tot; ++i)
    if (f[i] == i) ans++;
  printf("%d", ans - 1);
}
