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

int main(){
  int N;
  cin>>N;
  string A,B;
  cin>>A>>B;
  int cnt1=0;
  for(int i=0;i<N;i++){
    if(A[i]=='1')cnt1++;
    if(B[i]=='1')cnt1--;
  }
  if(cnt1!=0){
    cout<<"-1\n";
    return 0;
  }

  long long ans=0;
  for(int i=0,cnt1move=0,cntA1=0,cntA0=0,lastA1=-1;i<N;i++){
    if(B[i]=='1'&&A[i]=='0'){
      if(lastA1<i-1){
        lastA1=i-1;
      }
      if(cntA1<i){
        cntA1=i;
      }

      while(A[cntA1]=='0')cntA1++;
      ans+=cntA1-lastA1-1;
      lastA1=cntA1;
      swap(A[i],A[cntA1]);
      cntA1++;
    }else if(B[i]=='0'&&A[i]=='1'){
      if(cntA0<i){
        cntA0=i;
      }
      ans++;
      while(A[cntA0]=='1')cntA0++;
      swap(A[i],A[cntA0]);
      cntA0++;

    }

  }

  cout<<ans<<'\n';
}
#include<stdio.h>
#include<iostream>
#include<vector>
#include<math.h>
#include<queue>
#include<map>
#include<algorithm>
#include<string.h>
#include<functional>
#include<limits.h>
#include<stdlib.h>
#include<string>
#include<unordered_map>
#include <iomanip>
using namespace std;

#define intmax INT_MAX
#define lmax LONG_MAX
#define uintmax UINT_MAX
#define ulmax ULONG_MAX
#define llmax LLONG_MAX
#define ll long long
#define rep(i,a,N) for((i)=(a);(i)<(N);(i)++)
#define rrp(i,N,a) for((i)=(N)-1;(i)>=(a);(i)--)
#define llfor ll i,j,k
#define sc(a) cin>>a
#define pr(a) cout<<a<<endl
#define pY puts("YES")
#define pN puts("NO")
#define py puts("Yes")
#define pn puts("No")
#define pnn printf("\n")
#define sort(a) sort(a.begin(),a.end())
#define reverse(a) reverse(a.begin(),a.end())
#define push(a,b) (a).push_back(b)
#define llvec vector<vector<ll>>
#define charvec vector<vector<char>>
#define sizeoof(a,b) (a,vector<ll>(b))
#define llpvec vector<pair<ll,ll>>
/*繰り上げ除算*/ll cei(ll x,ll y){ll ans=x/y;if(x%y!=0)ans++;return ans;}
/*最大公約数*/ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
/*最小公倍数*/ll lcm(ll x,ll y){return x/gcd(x,y)*y;}
/*n乗*/ll llpow(ll x,ll n){ll i,ans=1;rep(i,0,n)ans*=x;return ans;}
/*階乗*/ll fact(ll x){ll i,ans=1;rep(i,0,x)ans*=(x-i);return ans;}
/*nCr*/ll ncr(ll n,ll r){return fact(n)/fact(r)/fact(n-r);}
/*nPr*/ll npr(ll n,ll r){return fact(n)/fact(n-r);}
/*primejudge*/bool prime(ll a){if(a<=1)return false;ll i;for(i=2;i*i<=a;i++){if(a%i==0)return false;}return true;}
ll ans=0;llfor;///////////////////////////////////////////////////////////
int main(){
  int N;

  vector<int> V(2510);
  int count=0;
  for(int i=1;i<10000;i++){
    if(i%6==0 || i%10==0 || i%15==0){
      V[count]=i;
      count++;
    }
  }
  cin>>N;
  for(int i=1;i<N+1;i++) cout<<V[i]<<" ";
  
return 0;}
