#include <bits/stdc++.h>
template <typename T>
void MACRO_VAR_Scan(T& t) {
  std::cin >> t;
}
template <typename First, typename... Rest>
void MACRO_VAR_Scan(First& first, Rest&... rest) {
  std::cin >> first;
  MACRO_VAR_Scan(rest...);
}
template <typename T>
void MACRO_VEC_ROW_Init(int n, T& t) {
  t.resize(n);
}
template <typename First, typename... Rest>
void MACRO_VEC_ROW_Init(int n, First& first, Rest&... rest) {
  first.resize(n);
  MACRO_VEC_ROW_Init(n, rest...);
}
template <typename T>
void MACRO_VEC_ROW_Scan(int p, T& t) {
  std::cin >> t[p];
}
template <typename First, typename... Rest>
void MACRO_VEC_ROW_Scan(int p, First& first, Rest&... rest) {
  std::cin >> first[p];
  MACRO_VEC_ROW_Scan(p, rest...);
}
template <typename T>
inline T CHMAX(T& a, const T b) {
  return a = (a < b) ? b : a;
}
template <typename T>
inline T CHMIN(T& a, const T b) {
  return a = (a > b) ? b : a;
}
using ll = long long;
using ull = unsigned long long;
constexpr ll INFINT = 1 << 30;
constexpr ll INFINT_LIM = (1LL << 31) - 1;
constexpr ll INFLL = 1LL << 60;
constexpr ll INFLL_LIM = (1LL << 62) - 1 + (1LL << 62);
constexpr double EPS = 1e-7;
constexpr ll MOD = 1000000007;
constexpr double PI = 3.141592653589793238462643383279;
signed main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);
  ;
  ll n;
  MACRO_VAR_Scan(n);
  ;
  std::vector<ll> a(n);
  for (auto& i : a) std::cin >> i;
  ;
  std::vector<ll> b(n);
  for (auto& i : b) std::cin >> i;
  ;
  ll x = 0;
  for (ll i = 0; i < ll(n); ++i) x ^= a[i];
  if (a == b) {
    std::cout << 0;
    std::cout << "\n";
    ;
    return 0;
  }
  {
    std::map<ll, ll> map;
    for (ll i = 0; i < ll(n); ++i) ++map[a[i]];
    ++map[x];
    for (ll i = 0; i < ll(n); ++i) {
      --map[b[i]];
      if (map[b[i]] < 0) {
        assert(false);
        std::cout << -1;
        std::cout << "\n";
        ;
        return 0;
      }
    }
  }
  std::map<ll, std::queue<ll>> g;
  for (ll i = 0; i < ll(n); ++i) {
    if (a[i] == b[i]) continue;
    g[b[i]].push(a[i]);
  }
  ll cnt = 0;
  while (!g.empty()) {
    if (g.find(x) == g.end()) {
      auto it = g.begin();
      ll t = it->second.front();
      it->second.pop();
      it->second.push(x);
      x = t;
    } else {
      ll t = g[x].front();
      g[x].pop();
      if (g[x].empty()) g.erase(x);
      x = t;
    }
    ++cnt;
  }
  std::cout << cnt;
  std::cout << "\n";
  ;
  return 0;
}
