#include <bits/stdc++.h>

#define MAXN (100010)

int n;
int a[MAXN], b[MAXN];
std::vector<int> vec[MAXN];
std::map<int, int> map;
std::multiset<int> seta, setb;
bool vis[MAXN];

void dfs(int u){
	vis[u] = true;
	for(auto v : vec[u]){
		if(vis[v]) continue;
		dfs(v);
	}
}

int main(){
	scanf("%d", &n);
	for(int i = 1; i <= n; ++ i) scanf("%d", a + i), a[0] ^= a[i], seta.insert(a[i]);
	for(int i = 1; i <= n; ++ i) scanf("%d", b + i), b[0] ^= b[i], setb.insert(b[i]);
	seta.insert(a[0]);
	setb.insert(b[0]);
	if(seta != setb) return printf("-1\n"), 0;
	
	int cnt = 0, e = 0, c = 0;
	for(int i = 1; i <= n; ++ i){
		if(a[i] == b[i]) continue;
		int u = map[a[i]] ? map[a[i]] : (map[a[i]] = ++ cnt);
		int v = map[b[i]] ? map[b[i]] : (map[b[i]] = ++ cnt);
		++ e;
		vec[u].push_back(v);
		vec[v].push_back(u);
	}
	if(!map[a[0]]) map[a[0]] = ++ cnt;
	if(!map[b[0]]) map[b[0]] = ++ cnt;
	for(int i = 1; i <= cnt; ++ i){
		if(!vis[i]){
			++ c;
			dfs(i);
		}
	}
	
	printf("%d\n", e + c - 1);
	return 0;
}