#include <bits/stdc++.h>
inline void read(int& r) {
  register char c;
  r = 0;
  do c = getchar();
  while (c < '0' || c > '9');
  do r = r * 10 + c - '0', c = getchar();
  while (c >= '0' && c <= '9');
}
int a[100000], b[100000], c[100001], d[100000];
int fa[100001];
bool vis[100001];
int find(int x) { return x == fa[x] ? x : fa[x] = find(fa[x]); }
int main() {
  int i, j, n, m;
  read(n);
  for (i = 0; i < n; i++) read(a[i]), c[i] = a[i], c[n] ^= a[i];
  for (i = 0; i < n; i++) read(b[i]), d[i] = b[i];
  std::sort(c, c + n + 1);
  std::sort(d, d + n);
  for (i = j = 0; j < n; i++, j++)
    while (c[i] != d[j])
      if (i == j)
        i++;
      else
        return puts("-1"), 0;
  for (i = j = 0; i < n; i++) j += a[i] != b[i];
  if (!j) return puts("0"), 0;
  int x = c[n];
  m = std::unique(c, c + n + 1) - c, j--;
  for (i = 0; i < m; i++) fa[i] = i;
  for (i = 0; i < n; i++)
    fa[find(std::lower_bound(c, c + m, a[i]) - c)] =
        find(std::lower_bound(c, c + m, b[i]) - c);
  for (i = 0; i < n; i++)
    if (a[i] != b[i] && !vis[find(std::lower_bound(c, c + m, a[i]) - c)])
      vis[fa[std::lower_bound(c, c + m, a[i]) - c]] = true, j++;
  if (!vis[find(std::lower_bound(c, c + m, x) - c)])
    vis[fa[std::lower_bound(c, c + m, x) - c]] = true, j++;
  printf("%d\n", j);
}
