#include <bits/stdc++.h>
const int N = 200005;
using namespace std;
int n, a[N], b[N], num[N], tot = 0;
int fa[N], sz[N], ans = 0, num1[N];
map<int, int> vis;
int getfa(int x) {
  if (fa[x] != x) fa[x] = getfa(fa[x]);
  return fa[x];
}
void add(int x, int y) {
  int X = getfa(x), Y = getfa(y);
  if (X == Y) return;
  fa[X] = Y;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    if (!vis[a[i]]) vis[a[i]] = ++tot;
    a[n + 1] ^= a[i];
    num[vis[a[i]]]++;
  }
  if (!vis[a[n + 1]]) vis[a[n + 1]] = ++tot;
  num[vis[a[n + 1]]]++;
  for (int i = 1; i <= tot; i++) num1[i] = num[i];
  for (int i = 1; i <= n; i++) {
    scanf("%d", &b[i]);
    if (!vis[b[i]] || num[vis[b[i]]] <= 0) ans = -1;
    b[n + 1] ^= b[i];
    num[vis[b[i]]]--;
  }
  if (!vis[b[n + 1]] || num[vis[b[n + 1]]] <= 0) ans = -1;
  if (ans == -1) {
    printf("-1\n");
    return 0;
  }
  for (int i = 1; i <= tot; i++) fa[i] = i;
  for (int i = 1; i <= n; i++) {
    if (a[i] == b[i]) continue;
    ans++;
    add(vis[a[i]], vis[b[i]]);
  }
  if (vis[a[n + 1]] != vis[b[n + 1]]) add(vis[a[n + 1]], vis[b[n + 1]]);
  for (int i = 1; i <= tot; i++) fa[i] = getfa(i);
  for (int i = 1; i <= tot; i++) sz[fa[i]]++;
  for (int i = 1; i <= tot; i++) {
    if (i == vis[a[n + 1]] && (fa[i] != i || sz[i] > num1[i])) ans--;
    if (fa[i] == i && sz[i] != num1[i]) ans++;
  }
  printf("%d\n", ans);
}
