#include <bits/stdc++.h>
const int MAXN = 2e5 + 10;
using namespace std;
int n;
int ans = 0, sum = 0;
int A[MAXN], B[MAXN], ta[MAXN], tb[MAXN], sa, sb, tot = 0, Do[MAXN], fa[MAXN];
int find(int x) { return fa[x] == x ? fa[x] : fa[x] = find(fa[x]); }
int unionn(int x, int y) { fa[x] = y; }
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &A[i]), sa ^= A[i];
  A[n + 1] = sa;
  for (int i = 1; i <= n; i++) scanf("%d", &B[i]), sb ^= B[i];
  B[n + 1] = sb;
  memcpy(ta, A, sizeof(A));
  memcpy(tb, B, sizeof(B));
  n++;
  sort(ta + 1, ta + n + 1);
  sort(tb + 1, tb + n + 1);
  for (int i = 1; i < n; i++)
    if (ta[i] != tb[i]) return puts("-1"), 0;
  for (int i = 1; i <= n; i++)
    if (A[i] != B[i] || (i == n)) {
      Do[++sum] = A[i];
      Do[++sum] = B[i];
      if (i < n) ans++;
    }
  if (ans == 0) return puts("0"), 0;
  sort(Do + 1, Do + sum + 1);
  sum = unique(Do + 1, Do + sum + 1) - Do - 1;
  for (int i = 1; i <= sum; i++) fa[i] = i;
  for (int i = 1; i <= n; i++)
    if (A[i] != B[i]) {
      A[i] = A[i] - Do[1];
      B[i] = B[i] - Do[1];
      unionn(find(A[i]), find(B[i]));
    }
  for (int i = 1; i <= sum; i++) ans += (fa[i] == i);
  printf("%d", ans - 1);
}
