#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
using namespace std;
const int N=200010;
map <int,int> w;
int a[N],b[N],fa[N];
inline int gi() {
    int x=0,o=1;
    char ch=getchar();
    while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
    if(ch=='-') o=-1,ch=getchar();
    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    return x*o;
}
inline int find(int x) {return fa[x]==x?x:fa[x]=find(fa[x]);}
int main() {
    int n,ans=0,tt=0;
    cin>>n;
    for(int i=1;i<=n;i++) a[i]=gi(),a[0]^=a[i],fa[i]=i;
    for(int i=1;i<=n;i++) b[i]=gi(),b[0]^=b[i];
    for(int i=0;i<=n;i++)
	if(!i||a[i]!=b[i]) {
	    if(i) ++ans;
	    if(!w[a[i]]) w[a[i]]=++tt,fa[tt]=tt;
	    if(!w[b[i]]) w[b[i]]=++tt,fa[tt]=tt;
	    fa[find(w[a[i]])]=find(w[b[i]]);
	}
    for(int i=1;i<=tt;i++)
	if(fa[i]==i) ++ans;
    sort(a,a+n+1),sort(b,b+n+1);
    for(int i=0;i<=n;i++)
	if(a[i]!=b[i]) return puts("-1"),0;
    cout<<ans-1;
    return 0;
}
### Prompt

Create a solution in Cpp for 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 <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
using namespace std;
const int N=200010;
map <int,int> w;
int a[N],b[N],fa[N];
inline int gi() {
    int x=0,o=1;
    char ch=getchar();
    while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
    if(ch=='-') o=-1,ch=getchar();
    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    return x*o;
}
inline int find(int x) {return fa[x]==x?x:fa[x]=find(fa[x]);}
int main() {
    int n,ans=0,tt=0;
    cin>>n;
    for(int i=1;i<=n;i++) a[i]=gi(),a[0]^=a[i],fa[i]=i;
    for(int i=1;i<=n;i++) b[i]=gi(),b[0]^=b[i];
    for(int i=0;i<=n;i++)
	if(!i||a[i]!=b[i]) {
	    if(i) ++ans;
	    if(!w[a[i]]) w[a[i]]=++tt,fa[tt]=tt;
	    if(!w[b[i]]) w[b[i]]=++tt,fa[tt]=tt;
	    fa[find(w[a[i]])]=find(w[b[i]]);
	}
    for(int i=1;i<=tt;i++)
	if(fa[i]==i) ++ans;
    sort(a,a+n+1),sort(b,b+n+1);
    for(int i=0;i<=n;i++)
	if(a[i]!=b[i]) return puts("-1"),0;
    cout<<ans-1;
    return 0;
}
```