#include<bits/stdc++.h>

using namespace std;

#define N 120000

int n,ans,fl,a[N],b[N];
map<int,int> fa,cnt,vis;

int gfa(int x){
	return x==fa[x]?x:fa[x]=gfa(fa[x]);
}

int main(){
	scanf("%d",&n);
	for (int i=1;i<=n;++i){scanf("%d",a+i); a[0]^=a[i];}
	for (int i=1;i<=n;++i){scanf("%d",b+i); b[0]^=b[i];}
	for (int i=0;i<=n;++i){++cnt[a[i]]; --cnt[b[i]];}
	for (auto i:cnt) if (i.second){puts("-1"); return 0;}
	for (int i=0;i<=n;++i) fa[a[i]]=a[i];
	vis[a[0]]=1; ans=1;
	for (int i=0;i<=n;++i){
		if (a[i]!=b[i]){
			ans+=(!vis[a[i]])+(!vis[b[i]]);
			vis[a[i]]=vis[b[i]]=1;
			++ans;
			int x=gfa(a[i]),y=gfa(b[i]);
			if (x!=y){
				--ans;
				fa[x]=y;
			}
		}
	}
	printf("%d\n",ans+fl-1-(a[0]!=b[0]));
	
	return 0;
}
			
### Prompt

Please formulate 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>

using namespace std;

#define N 120000

int n,ans,fl,a[N],b[N];
map<int,int> fa,cnt,vis;

int gfa(int x){
	return x==fa[x]?x:fa[x]=gfa(fa[x]);
}

int main(){
	scanf("%d",&n);
	for (int i=1;i<=n;++i){scanf("%d",a+i); a[0]^=a[i];}
	for (int i=1;i<=n;++i){scanf("%d",b+i); b[0]^=b[i];}
	for (int i=0;i<=n;++i){++cnt[a[i]]; --cnt[b[i]];}
	for (auto i:cnt) if (i.second){puts("-1"); return 0;}
	for (int i=0;i<=n;++i) fa[a[i]]=a[i];
	vis[a[0]]=1; ans=1;
	for (int i=0;i<=n;++i){
		if (a[i]!=b[i]){
			ans+=(!vis[a[i]])+(!vis[b[i]]);
			vis[a[i]]=vis[b[i]]=1;
			++ans;
			int x=gfa(a[i]),y=gfa(b[i]);
			if (x!=y){
				--ans;
				fa[x]=y;
			}
		}
	}
	printf("%d\n",ans+fl-1-(a[0]!=b[0]));
	
	return 0;
}
			
```