#include<map>
#include<cstdio>
#include<algorithm>
#define N 100005
inline int read(){
    int x=0;char ch=getchar();
    for(;ch<48||ch>57;ch=getchar());
    for(;ch>47&&ch<58;ch=getchar())
    x=(x<<1)+(x<<3)+(ch^48);return x;
}
using namespace std;
int s[N],t[N],f[N];
map<int,int>vis,num;
int Fin(int x){return f[x]==x?x:f[x]=Fin(f[x]);}
void merge(int x,int y){
    x=Fin(x),y=Fin(y);
    if(x^y)f[x]=y;
}
int main(){
    int n=read(),sum=0,ans=0,tot=0;
    for(int i=1;i<=n;++i)++vis[s[i]=read()];
    for(int i=1;i<=n;++i)--vis[t[i]=read()];
    for(int i=1;i<=n;++i)sum^=s[i];++vis[sum];
    for(auto v:vis)if(v.second<0)return puts("-1"),0;
    s[n+1]=sum;sum=0;
    for(int i=1;i<=n;++i)sum^=t[i];t[++n]=sum;
    for(int i=1;i<n;++i)
        if(s[i]^t[i]){
            ++ans;
            if(!num[s[i]])num[s[i]]=++tot;
            if(!num[t[i]])num[t[i]]=++tot;
        }
    if(!num[s[n]])num[s[n]]=++tot;
    if(!num[t[n]])num[t[n]]=++tot;
    if(!ans)return puts("0"),0;
    for(int i=1;i<=tot;++i)f[i]=i;
    for(int i=1;i<=n;++i)
        if(s[i]^t[i])
            merge(num[s[i]],num[t[i]]);
    for(int i=1;i<=tot;++i)
        if(f[i]==i)++ans;
    printf("%d\n",ans-1);
    return 0;
}