#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define REP(i,n) for(int i=0;i<(n);i++)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define SZ(x) ((int)x.size())
#define ALL(x) (x).begin(),(x).end()
using namespace std;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef long long ll;

template<class T> void read(T &x){
	int f=0; x=0; char ch=getchar();
	for(;!isdigit(ch);ch=getchar()) f|=(ch=='-');
	for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
	if(f) x=-x;
}

const int N=500005;
char s[N],t[N];
int las,n,cur;
ll ans;

void go(){
	for(;cur<=n&&t[cur]!='1';cur++);
}

int main(){
	read(n);
	scanf("%s",s+1);
	scanf("%s",t+1);
	cur=1,go();
	rep(i,1,n){
		if(s[i]!='1') continue;
		if(las){
			ans+=i-las,las=0;
			continue;
		}
		if(i<cur){
			las=i;
			continue;
		}
		ans+=i-cur;
		cur++,go();
	}
	if(las||cur<=n){
		puts("-1");
	}
	else{
		cout<<ans<<endl;
	}
	return 0;
}
//缓缓飘落的枫叶像思念，我点燃烛火温暖岁末的秋天。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=2e6;
ll n,a[1000][1000];
ll c[N],d[N];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            cin>>a[i][j];
    
    int flag=1;
    ll g=1e10+2;
    for(int i=1;i<=n;i++)
        g=min(a[1][i],g);
    c[1]= g;
    for(int i=1;i<=n;i++)
        d[i]=a[1][i]-c[1];
    for(int i=2;i<=n;i++)
    {
        c[i]=a[i][1]-d[1];
        if(c[i]<0){flag=0;break;}
        for(int j=1;j<=n;j++)
            if(c[i]+d[j]!=a[i][j]){flag=0;break;}
    }
    if(!flag)cout<<"No";
    else
    {
        cout<<"Yes\n";
        for(int i=1;i<=n;i++)
            cout<<c[i]<<" ";
        cout<<"\n";
        for(int i=1;i<=n;i++)
            cout<<d[i]<<" ";
    }
}


