#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);

  int N;
  cin >> N;
  string S, T;
  cin >> S >> T;
  deque<int> A, B;
  for (int i = 0; i < N; i++) {
    if (S[i] == '1') A.emplace_back(i);
    if (T[i] == '1') B.emplace_back(i);
  }

  long long ans = 0;

  for (int i = 0; i < N; i++) {
    int s = binary_search(begin(A), end(A), i);
    int t = T[i] - '0';
    if (s == t) {
      if (s == 1) {
        assert(A.front() == i);
        A.pop_front();
      }
      continue;
    }
    if (s == 0 && t == 1) {
      if (A.empty()) {
        cout << -1 << '\n';
        return 0;
      }
      ans += abs(A.front() - i);
      A.pop_front();
    } else if (s == 1 && t == 0) {
      assert(A.front() == i);
      A.pop_front();
      if (A.empty()) {
        cout << -1 << '\n';
        return 0;
      }
      ans += abs(A.front() - i);
      A.pop_front();
    } else {
      assert(false);
    }
  }

  cout << ans << '\n';
  return 0;
}

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f3f3f3f3fll
typedef unsigned long long ull;
typedef long long ll;
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define nep(i,r,l) for(int i=r;i>=l;i--)
void sc(int &x){scanf("%d",&x);}
void sc(int &x,int &y){scanf("%d%d",&x,&y);}
void sc(int &x,int &y,int &z){scanf("%d%d%d",&x,&y,&z);}
void sc(ll &x){scanf("%lld",&x);}
void sc(ll &x,ll &y){scanf("%lld%lld",&x,&y);}
void sc(ll &x,ll &y,ll &z){scanf("%lld%lld%lld",&x,&y,&z);}
void sc(char *x){scanf("%s",x);}
void sc(char *x,char *y){scanf("%s%s",x,y);}
void sc(char *x,char *y,char *z){scanf("%s%s%s",x,y,z);}
void out(int x){printf("%d\n",x);}
void out(ll x){printf("%lld\n",x);}
void out(int x,int y){printf("%d %d\n",x,y);}
void out(ll x,ll y){printf("%lld %lld\n",x,y);}
void out(int x,int y,int z){printf("%d %d %d\n",x,y,z);}
void out(ll x,ll y,ll z){printf("%lld %lld %lld\n",x,y,z);}
using namespace std;
const int N=2e5+5;
int n,a[N],b[N];
unordered_map<int,int>vis;
vector<int>v[N];
int bit[N];
void add(int x)
{
    while(x<=n) bit[x]++,x+=x&-x;
}
int query(int x)
{
    int ans=0;
    while(x) ans+=bit[x],x-=x&-x;
    return ans;
}
int main()
{
    sc(n);
    rep(i,1,n) sc(a[i]),a[i]+=i-1;
    rep(i,1,n) sc(b[i]),b[i]+=i-1;
    int id=0;
    rep(i,1,n)
        if(!vis[a[i]])
            vis[a[i]]=++id;
    nep(i,n,1)
        v[vis[a[i]]].push_back(i);
    ll ans=0;
    rep(i,1,n)
    {
        int x=vis[b[i]];
        if(!x||v[x].size()==0)
        {
            out(-1);return 0;
        }
        int pos=v[x].back()+(i-1-query(v[x].back()));
        add(v[x].back());
        v[x].pop_back();
        ans+=pos-i;
    }
    out(ans);
}
