#include<bits/stdc++.h>
using namespace std;
const int maxn=200100;
int c[maxn],cnt_color;
int n;
void No(){
	puts("No");
	exit(0);
}
void Yes(){
	puts("Yes");
	for(int i=1;i<=n*2;i++)
		printf("%d ",c[i]);
	printf("\n");
	exit(0);
}
char str[maxn];
vector<int> vec[maxn];
int num;
void get_vec(){
	int las=0;
	for(int i=0;i<=n*2;i++){
		if(str[i]=='1'){
			if(las==0){
				num++;
				vec[num].push_back(i);
				vec[num].push_back(i+1);
			}
			else
				vec[num].push_back(i+1);
			las=1;
		}
		else
			las=0;
	}
}
int stk[maxn],top;
void color_all(){
	int las=0;
	for(int i=1;i<=n*2;i++){
		if(!c[i]){
			if(!las) c[i]=++cnt_color;
			else c[i]=cnt_color;
			las^=1;
		}
	}
}
void get_ans(){
	if(top%4!=0) No();
	for(int i=1;i<=top;i+=4){
		c[stk[i]]=c[stk[i+2]]=++cnt_color;
		c[stk[i+1]]=c[stk[i+3]]=++cnt_color;
	}
	color_all();
	Yes();
}
void get_stk(){
	for(int i=1;i<=num;i++)
		if(vec[i].back()==n*2+1)
			swap(vec[i],vec[num]);
	int las;
	for(int i=1;i<=num;i++){
		if(i!=1) c[vec[i][0]]=c[las]=++cnt_color;
		for(int j=1;j<(int)vec[i].size()-1;j++)
			stk[++top]=vec[i][j];
		las=vec[i].back();
	}
	get_ans();
}
void get_pos(int &p1,int &p2){
	p1=0,p2=0;
	for(int i=1;i<=n;i++){
		if((int)vec[i].size()>2){
			if(p1==0) p1=i;
			else if(p2==0) p2=i;
			else break;
		}
	}
}
void trans(){
	int p1,p2,x;
	get_pos(p1,p2);
	if(p2==0) No();
	if(vec[p1].front()==0&&vec[p2].back()==n*2+1)
		No();

	x=vec[p2].back();
	vec[p2].pop_back();

	c[vec[p1][1]]=c[vec[p2].back()]=++cnt_color;
	vec[p2].pop_back();

	for(int j=2;j<(int)vec[p1].size();j++)
		vec[p2].push_back(vec[p1][j]);
	vec[p1].resize(2);
	vec[p1][1]=x;
}
int main(){
//	freopen("G.in","r",stdin);
//	freopen("G.out","w",stdout);
	scanf("%d",&n);
	scanf("%s",str+1);
	str[0]='1',str[n*2]='1';
	int cnt=0;
	for(int i=1;i<=n*2;i++)
		if(str[i-1]=='1'&&str[i]=='1')
			cnt++;
	if(cnt&1) No();
	if(cnt==n*2){
		top=n*2;
		for(int i=1;i<=n*2;i++)
			stk[i]=i;
		get_ans();
		return 0;
	}
	get_vec();
	if(cnt%4==2)
		trans();
	get_stk();
	return 0;
}
