#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD = 10007;
int main() {
    ll n;
    cin >> n;
    string s,t;
    cin >> s >> t;
    vector<ll>ss(n),tt(n);
    for(ll i=0;i<n;i++){
        ss[i]=s[i]-'0';
        tt[i]=t[i]-'0';
    }
    ll ans=0;
    ll j=0;
    for(ll i=0;i<n;i++){
        if(ss[i]!=tt[i]){
            j=max(j,i+1);
            while((j<n)&&ss[j]!=1){
                j++;
            }
            if(j==n)break;
            ans+=j-i;
            ss[i]=(ss[i]+1)%2;
            ss[j]=(ss[j]+1)%2;
        }
    }
    bool ok=false;
    for(ll i=0;i<n;i++){
        if(ss[i]!=tt[i]){
            ok=true;
        }
    }
    if(ok){
        cout << -1 << endl;
    }else{
        cout << ans << endl;
    }
}
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=500005;
int n,S[N],T[N],ans,tot,st[N];
char s[N],t[N];
queue<int>q;
signed main()
{
    scanf("%lld%s%s",&n,s+1,t+1);
    for(int i=1;i<=n;i++)S[i]=(s[i]^48),T[i]=(t[i]^48);
    for(int i=1;i<=n;i++)if(S[i])q.push(i);
    for(int i=1;i<=n;i++){
        if(!T[i])continue;
        while(!q.empty()){
            if(q.front()<i||tot&1){
                st[++tot]=q.front();q.pop();
            }else break;
        }if(q.empty()){puts("-1");return 0;}
        ans+=q.front()-i;q.pop();
    }while(!q.empty())st[++tot]=q.front(),q.pop();
    if(tot&1){puts("-1");return 0;}
    for(int i=1;i<tot;i+=2)ans+=st[i+1]-st[i];
    cout<<ans;
    return 0;
}