#include<bits/stdc++.h>
using namespace std;
const int N = 5e5 + 10;
char s[N], t[N];
stack<int> S, T;
int main() {
	int n; long long ans = 0; scanf("%d", &n);
	scanf("%s%s", s + 1, t + 1);
	for (int i = 1; i <= n; i++) {
		if (t[i] == '1') T.push(i);
		if (s[i] == '1') {
			if (!S.empty())
				ans += i - S.top(), S.pop();
			else {
				if (T.empty()) S.push(i);
				else ans += i - T.top(), T.pop();
			}
		}
	}
	if (!S.empty() || !T.empty()) puts("-1");
	else printf("%lld\n", ans);
	return 0;
}

#pragma GCC optimize("O3")
#include<bits/stdc++.h> 
using namespace std;
using ll=long long;
using P=pair<ll,ll>;
template<class T> using V=vector<T>; 
#define fi first
#define se second
#define all(v) (v).begin(),(v).end()
const ll inf=(1e18);
//const ll mod=998244353;
const ll mod=1000000007;
const vector<int> dy={-1,0,1,0},dx={0,-1,0,1};
struct __INIT{__INIT(){cin.tie(0);ios::sync_with_stdio(false);cout<<fixed<<setprecision(15);}} __init;
template<class T> bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T> bool chmin(T &a, const T &b) { if (a>b) { a=b; return 1; } return 0; }
template<class T>void debag(const vector<T> &a){cerr<<"debag :";for(auto v:a)cerr<<v<<" ";cerr<<"\n";}
template<class T>void print(const vector<T> &a){for(auto v:a)cout<<v<<" ";cout<<"\n";}
V<ll> p={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71};
int main(){
  ll a,b;
  cin>>a>>b;
  V<ll> dp((1<<20),0);
  dp[0]=1;
  V<ll> tmp={};
  for(ll i=a;i<=b;i++){
        ll v=0;
        for(int j=0;j<20;j++){
            if(i%p[j]==0)v+=(1ll<<j);
        }
        tmp.emplace_back(v);
  }
  int m=tmp.size();
  for(int i=0;i<m;i++){
      for(ll j=0;j<(1<<20);j++){
          if((j&tmp[i])>0)continue;
          dp[j|tmp[i]]+=dp[j];
      }
  }
  ll ans=0;
  for(int i=0;i<(1<<20);i++)ans+=dp[i];
  cout<<ans<<"\n";
}