#include<bits/stdc++.h> 
using namespace std;
namespace Ruri{
    #define ms(a,b) memset(a,b,sizeof(a))
    #define repi(i,a,b) for(int i=a,bbb=b;i<=bbb;++i)//attention reg int or reg ll ?
    #define repd(i,a,b) for(int i=a,bbb=b;i>=bbb;--i)
    #define reps(s) for(int i=head[s],v=e[i].to;i;i=e[i].nxt,v=e[i].to)
    #define ce(i,r) i==r?'\n':' '
    #define pb push_back 
    #define all(x) x.begin(),x.end()
    #define gmn(a,b) a=min(a,b)
    #define gmx(a,b) a=max(a,b)
    #define fi first
    #define se second                         
    typedef long long ll;
    typedef unsigned long long ull;
    typedef double db;
    const int infi=1e9;//infi较大，注意涉及inf相加时爆int
    const ll infl=4e18;
    inline ll ceil_div(ll a,ll b){ return (a+b-1)/b; }
    inline ll pos_mod(ll a,ll b){ return (a%b+b)%b; }
    //std::mt19937 rnd(time(0));//std::mt19937_64 rnd(time(0));
}
using namespace Ruri;
namespace Read{
    #define ss(a) scanf("%s",a)
    inline int ri(){ int x; scanf("%d",&x); return x; }
    inline ll rl(){ ll x;  scanf("%lld",&x); return x; }
    inline db rd(){ db x; scanf("%lf",&x); return x; }
}
namespace DeBug{
    #define pr(x) cout<<#x<<": "<<(x)<<endl
    #define pra(x,a,b) cout<<#x<<": "<<endl; \
            repi(i,a,b) cout<<x[i]<<" ";     \
            puts("");   
    #define FR(a) freopen(a,"r",stdin)
    #define FO(a) freopen(a,"w",stdout)
}
using namespace Read;
using namespace DeBug;
const int MAX_N=105;
int n;
char s[MAX_N];
int g[MAX_N][MAX_N];
bool vis[MAX_N];
void Dfs(int u)
{
	vis[u]=true;
	repi(i,1,n)if(g[u][i]&&!vis[i]) Dfs(i);
}
int main()
{
	n=ri();
	repi(i,1,n){
		ss(s+1);
		repi(j,1,n)if(s[j]=='1') g[j][i]=true;
	}
	db ans=0;
	repi(i,1,n){
		ms(vis,0);
		Dfs(i);
		int cnt=0;
		repi(j,1,n)if(vis[j]) ++cnt;
		ans+=1.0/cnt;
	}
	printf("%.10lf\n",ans);
    return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define Maxn 500007
int n;
char s1[Maxn],s2[Maxn];
int main()
{
    scanf("%d",&n);
    scanf("%s",s1+1);
    scanf("%s",s2+1);
    long long ans=0LL;
    long long cnt=0;
    for (int i=1;i<=n;i++)
    {
        if (cnt==0)
        {
            if (s1[i]==s2[i]) cnt=0; else cnt=1;
            ans+=cnt;
        } else
        {
            long long tmp;
            if (s1[i]=='1') tmp=cnt-1; else tmp=cnt;
            s1[i]='0';
            if (s1[i]!=s2[i]) ++tmp;
            ans+=tmp;
            cnt=tmp;
        }
    }
    if (cnt>0) printf("%d\n",-1); else printf("%lld\n",ans);
    return 0;
}