#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;
}
### Prompt

Your challenge is to write a CPP solution to the following problem:

There is a sequence of length N: a = (a_1, a_2, ..., a_N). Here, each a_i is a non-negative integer.

Snuke can repeatedly perform the following operation:

* Let the XOR of all the elements in a be x. Select an integer i (1 ≤ i ≤ N) and replace a_i with x.



Snuke's objective is to match a with another sequence b = (b_1, b_2, ..., b_N). Here, each b_i is a non-negative integer.

Determine whether the objective is achievable, and find the minimum necessary number of operations if the answer is positive.

Constraints

* 2 ≤ N ≤ 10^5
* a_i and b_i are integers.
* 0 ≤ a_i, b_i < 2^{30}

Input

Input is given from Standard Input in the following format:


N
a_1 a_2 ... a_N
b_1 b_2 ... b_N


Output

If the objective is achievable, print the minimum necessary number of operations. Otherwise, print `-1` instead.

Examples

Input

3
0 1 2
3 1 0


Output

2


Input

3
0 1 2
0 1 2


Output

0


Input

2
1 1
0 0


Output

-1


Input

4
0 1 2 3
1 0 3 2


Output

5

### Response

```cpp
#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;
}
```