#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i = a; i < (b); ++i)
#define rrep(i,a,b) for(int i = b; i --> (a);)
#define all(v) v.begin(),v.end()
#define trav(x,v) for(auto &x : v)
#define sz(v) (int)(v).size()
typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> pii;

struct UF {
	vi t;
	UF(int n){
		t.resize(n, -1);
	}
	int find(int a){
		return t[a]<0 ? a : t[a] = find(t[a]);
	}
	bool uni(int a, int b){
		a = find(a), b = find(b);
		if(a == b) return 0;
		if(t[a] < t[b]) swap(a,b);
		t[b] += t[a];
		t[a] = b;
		return 1;
	}
};

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	
	int n;
	cin >> n;
	vi as(n), bs(n);
	trav(a, as) cin >> a;
	trav(b, bs) cin >> b;
	int x = 0;
	trav(a, as) x ^= a;
	as.push_back(x);
	x = 0;
	trav(b, bs) x ^= b;
	bs.push_back(x);
	vi s = as, t = bs;
	sort(all(s)), sort(all(t));
	if(s != t){
		cout << -1 << endl;
		return 0;
	}
	int ans = 0;
	rep(i,0,n) ans += as[i] != bs[i];

	map<int,int> ren;
	trav(x, as) ren[x] = 0;
	int ix = 0;
	trav(pa, ren) pa.second = ix++;
	ans += ix-1;
	UF uf(ix);
	rep(i,0,n) ans -= uf.uni(ren[as[i]], ren[bs[i]]);
	rep(i,0,ix) if(i != ren[as.back()] && uf.t[i] == -1) --ans;
	cout << ans << endl;
}