#include<cstdio>
#include<vector>
#include<cstdlib>
#define SZ(v)((int)v.size())
#define pb push_back
using namespace std;
typedef vector<int>VI;
const int N=200005;
VI li[N],id;
char s[N];
int n,m,L,ec,sum,mark[N];

void markit(){
	for(int i=0;i<<2<id.size();++i){
		for(int j:{0,1}){
			for(int k:{0,1}){
				mark[id[i<<2|j<<1|k]]=ec+k+1;
			}
		}
		ec+=2;
	}
}

void output(){
	puts("Yes");
	for(int i=0;i<L;++i){
		if(!mark[i])
		mark[i]=ec<0?-ec:++ec,ec=-ec;
		printf("%d ",mark[i]);
	}
	exit(0);
}

int main(){
	scanf("%d",&n);
	scanf("%s",s+1);
	s[0]='1';L=n<<1;
	for(int i=0,j;i<L;++i){
		if(s[i]=='0'&&s[(i+1)%L]=='1'){
			li[m].pb(i),j=(i+1)%L;
			for(;s[j]=='1';j=(j+1)%L)
			li[m].pb(j);
			++m;
		}
	} 
	if(!m){
		if(~n&1){
			for(int i=0;i<L;++i)id.pb(i);
			markit();output();
		}else puts("No"),exit(0);
	}
	for(int i=0;i<m;++i)sum+=SZ(li[i])-2;
	if(sum&1)puts("No"),exit(0);
	if(sum&2){
		for(int i=0;i<m;++i)
		if(SZ(li[i])>2)li[m-1].swap(li[i]);
		for(int i=0;i<m-1;++i){
			if(SZ(li[i])>2){
				VI&a=li[i],&b=li[m-1];
				int la=SZ(a)-1,lb=SZ(b)-1;
				int ea=a[la],eb=b[lb];
				mark[a[la-1]]=++ec;
				mark[b[lb-1]]=ec;
				a.pop_back();b.pop_back();
				a.pop_back();b.pop_back();
				a.pb(eb);b.pb(ea);
				sum-=2;
				break;
			}
		}
		if(sum&2)puts("No"),exit(0);
	}
	for(int i=0;i<m;++i){
		mark[li[i][0]]=ec+1+i;
		mark[li[i][SZ(li[i])-1]]=ec+1+(i+1)%m;
		for(int j=1;j<SZ(li[i])-1;++j)
		id.pb(li[i][j]);
	}
	ec+=m;
	markit();
	output();
	return 0;
}