#include <bits/stdc++.h>
using namespace std;
using Graph = vector<vector<long long>>;
const long long INF = 1LL <<60;
const long long Mo=1000000007;
     
vector<long long> seen;

long long dfs(const Graph &G, int v, long long cnt) {
  seen[v] = cnt;	//判定だけならcntをboolに
  // v から行ける各頂点 next_v について
  for (auto next_v : G[v]) {
    if (seen[next_v]>=0) continue; // next_v が探索済だったらスルー
    dfs(G, next_v, cnt); // 再帰的に探索
  }
  //cout<<grp<<" "<<cnt<<endl;
  return 0;
}
     
long long gcn(long long x,long long y){
  if(x%y==0){
    return y;  
  }
  else{
    return gcn(y,x%y);
  }
}
     
long long modpow(long long a, long long n, long long mod) {
  long long res = 1;
  while (n > 0) {
    if (n & 1) res = res * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return res;
}  
int main(void){
  long long res=0,tmp1,tmp2,cnt,idx,cur,prev;
  long long flg,fir=1;
  long long i,j;
  long long n,m,k,l;
  string s,t;
  
  cin>>n;
  cin>>s;
  cin>>t;
  /*
  if(n==1 && s[0]!=t[0]){
    res=-1;
    cout<<res<<endl;
    return 0;
  }
  */
  for(l=n-1;l>=0;l--){
    if(s[l]!=t[l]){
      break;
    }
  }
  if(s[l]=='0'){
    res=-1;
    cout<<res<<endl;
    return 0;
  }
    
  
  for(i=0;i<l;i++){
    if(s[i]!=t[i]){
      flg=0;
      fir=max(fir,i+1);
      for(j=fir;j<=l;j++){
        if(s[j]=='1'){
          flg=1;
          s[j]='0';
          res+=(j-i);
          fir=j+1;
          if(j==l){
            for(k=l-1;k>fir;k--){
              l=k;
              if(s[k]!=t[k]){
                break;
              }
            }
          }
          /*
          if(s[l]=='0' || s[l]==t[l]){
            res=-1;
            cout<<res<<endl;
            return 0;
          }*/
          break;
        }
      }
      if(flg==0){
        res=-1;
        cout<<res<<endl;
        return 0;
      }
    }
  }
   
  if(s[i]!=t[i]){
    res=-1;
  }
 
  cout<<res<<endl;
  //cout<<setprecision(15)<<res<<endl;
  //cout<<res<<endl;
      
  return 0;
}

/*
Graph G(n);
seen.assign(n,-1);
for(i=0; i<m; i++) {
  cin>>tmp1>>tmp2;
  tmp1--;
  tmp2--;
  G[tmp1].push_back(tmp2);
  G[tmp2].push_back(tmp1);
}
*/
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,b,c;
	cin>>a>>b>>c;
	if(a*a+b*b<c*c)
	puts("Yes");
	else puts("No");
 } 