#include <bits/stdc++.h>
using namespace std;
const int N=1e5+50;
int gi(){
    char ch=getchar(); int x=0,q=0;
    while(ch<'0'||ch>'9') q=ch=='-'?1:q,ch=getchar();
    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    return q?-x:x;
}
int a[N],b[N],c[N],d[N],f[N],p,ans;
map<int,int>fa;
int find(int x){
    return x==f[x]?x:f[x]=find(f[x]);
}
int main(){
    int n=gi(),s=0;
    for (int i=1; i<=n; ++i)
	c[i]=a[i]=gi(),s^=a[i];
    c[n+1]=a[n+1]=s,s=0;
    for (int i=1; i<=n; ++i)
	d[i]=b[i]=gi(),s^=b[i];
    ++n,d[n]=a[n]=s;
    sort(c+1,c+n+1);
    sort(d+1,d+n+1);
    for (int i=1; i<=n; ++i)
	if (c[i]!=d[i])
	    return puts("-1"),0;
    for (int i=1; i<=n; ++i){
	if (a[i]!=b[i]&&i!=n) ++ans;
	if (i==n&&ans==0){
	    cout<<0; return 0;
	}
	if (a[i]!=b[i]||i==n){
	    if (!fa[a[i]]) fa[a[i]]=++p;
	    if (!fa[b[i]]) fa[b[i]]=++p;
	}
    }
    for (int i=1; i<=p; ++i) f[i]=i;
    for (int i=1; i<=n; ++i)
	if (a[i]!=b[i])
	    f[find(fa[a[i]])]=find(fa[b[i]]);
    for (int i=1; i<=p; ++i)
	if (find(i)==i)
	    ++ans;
    cout<<ans-1;
    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;
const int N=1e5+50;
int gi(){
    char ch=getchar(); int x=0,q=0;
    while(ch<'0'||ch>'9') q=ch=='-'?1:q,ch=getchar();
    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    return q?-x:x;
}
int a[N],b[N],c[N],d[N],f[N],p,ans;
map<int,int>fa;
int find(int x){
    return x==f[x]?x:f[x]=find(f[x]);
}
int main(){
    int n=gi(),s=0;
    for (int i=1; i<=n; ++i)
	c[i]=a[i]=gi(),s^=a[i];
    c[n+1]=a[n+1]=s,s=0;
    for (int i=1; i<=n; ++i)
	d[i]=b[i]=gi(),s^=b[i];
    ++n,d[n]=a[n]=s;
    sort(c+1,c+n+1);
    sort(d+1,d+n+1);
    for (int i=1; i<=n; ++i)
	if (c[i]!=d[i])
	    return puts("-1"),0;
    for (int i=1; i<=n; ++i){
	if (a[i]!=b[i]&&i!=n) ++ans;
	if (i==n&&ans==0){
	    cout<<0; return 0;
	}
	if (a[i]!=b[i]||i==n){
	    if (!fa[a[i]]) fa[a[i]]=++p;
	    if (!fa[b[i]]) fa[b[i]]=++p;
	}
    }
    for (int i=1; i<=p; ++i) f[i]=i;
    for (int i=1; i<=n; ++i)
	if (a[i]!=b[i])
	    f[find(fa[a[i]])]=find(fa[b[i]]);
    for (int i=1; i<=p; ++i)
	if (find(i)==i)
	    ++ans;
    cout<<ans-1;
    return 0;
}

```