#include<bits/stdc++.h>
using namespace std;

const int maxn=200005;
int n,m,cnt;
int ans[maxn];
vector<int>pos[maxn],apos;
char s[maxn];

int main(){
	scanf("%d%s",&n,s);
	s[2*n-1]='1';
	for(int i=0;i<2*n;i++)if(s[i]=='1'){
		int j=i;
		while(j<2*n&&s[j]=='1')j++;
		for(int k=i;k<j;k++)pos[m].push_back(k);
		m++;
		i=j-1;
	}
	if(s[0]=='1'&&m>1){
		for(int k=0;k<int(pos[0].size());k++)pos[m-1].push_back(pos[0][k]);
		pos[0]=pos[m-1];
		m--;
	}
	int sum=0;
	for(int i=0;i<m;i++)sum+=int(pos[i].size())-1;
	if(m==1&&int(pos[0].size())==2*n)sum++;
	if(sum&1){
		puts("No");
		return 0;
	}
	int last=-1,fir=-1;
	if(sum%4==2){
		if(m==1&&sum==2*n){
			puts("No");
			return 0;
		}
		bool f=false;
		for(int i=0;i<m&&(!f);i++)for(int j=i+1;j<m&&(!f);j++)if(int(pos[i].size())>1&&int(pos[j].size())>1){
			f=true;
			fir=pos[i][0];
			ans[pos[i][1]]=ans[pos[j][1]]=++cnt;
			for(int k=2;k<int(pos[j].size());k++)apos.push_back(pos[j][k]);
			last=(pos[j].back()+1)%(2*n);
			ans[last]=ans[pos[j][0]]=++cnt;
			for(int k=2;k<int(pos[i].size());k++)apos.push_back(pos[i][k]);
			last=(pos[i].back()+1)%(2*n);
			for(int p=0;p<m;p++)if(p!=i&&p!=j){
				ans[last]=ans[pos[p][0]]=++cnt;
				for(int k=1;k<int(pos[p].size());k++)apos.push_back(pos[p][k]);
				last=(pos[p].back()+1)%(2*n);
			}
		}
		if(!f){
			puts("No");
			return 0;
		}
	}
	else{
		if(m==1&&sum==2*n){
			puts("Yes");
			for(int i=0;i<n/2;i++)printf("%d %d %d %d ",2*i+1,2*i+2,2*i+1,2*i+2);
			puts("");
			return 0;
		}
		for(int i=0;i<m;i++){
			if(fir<0)fir=pos[i][0];
			if(last>=0)ans[last]=ans[pos[i][0]]=++cnt;
			for(int k=1;k<int(pos[i].size());k++)apos.push_back(pos[i][k]);
			last=(pos[i].back()+1)%(2*n);
		}
	}
	puts("Yes");
	if(fir>=0&&last>=0)ans[fir]=ans[last]=++cnt;
	for(int i=0;i<int(apos.size());i+=4){
		ans[apos[i]]=ans[apos[i+2]]=cnt+1;
		ans[apos[i+1]]=ans[apos[i+3]]=cnt+2;
		cnt+=2;
	}
	int c=0;
	for(int i=0;i<2*n;i++){
		if(ans[i]==0){
			if(c==0)ans[i]=++cnt,c=1;
			else ans[i]=cnt,c=0;
		}
		printf("%d%c",ans[i],i==2*n-1?'\n':' ');
	} 
	return 0;
} 