#include <bits/stdc++.h>
using namespace std;
int a[100010], b[100010], c[100010], d[100010], fa[100010], sz[100010], n,
    cnt = 0, cnt2 = 0;
bool vis[100010];
vector<int> v;
int find(int x) { return fa[x] == x ? x : fa[x] = find(fa[x]); }
int main() {
  ios::sync_with_stdio(0);
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i], a[n + 1] ^= a[i], v.push_back(a[i]);
  v.push_back(a[n + 1]);
  for (int i = 1; i <= n; i++) cin >> b[i], b[n + 1] ^= b[i];
  memcpy(c, a, sizeof(a));
  memcpy(d, b, sizeof(b));
  sort(c + 1, c + n + 2), sort(d + 1, d + n + 2);
  for (int i = 1; i <= n + 1; i++) {
    if (c[i] != d[i]) return cout << "-1" << endl, 0;
  }
  sort(v.begin(), v.end());
  v.erase(unique(v.begin(), v.end()), v.end());
  for (int i = 0; i < v.size(); i++) fa[i] = i, sz[i] = 1;
  for (int i = 1; i <= n + 1; i++) {
    int x = lower_bound(v.begin(), v.end(), a[i]) - v.begin();
    int y = lower_bound(v.begin(), v.end(), b[i]) - v.begin();
    if (a[i] != b[i]) cnt++, vis[x] = vis[y] = 1;
    if (find(x) != find(y)) fa[find(x)] = find(y), sz[find(y)] += sz[find(x)];
  }
  for (int i = 0; i < v.size(); i++) {
    if (!vis[i] || find(i) != i) continue;
    cnt2++;
  }
  cout << cnt + cnt2 - 2 * (a[n + 1] != b[n + 1]) << endl;
  return 0;
}
