#include<bits/stdc++.h>
using namespace std;
#define nn 100008*8
#define lf double
#define mp make_pair
#define ll long long
#define err {puts("No");exit(0);}
int status[nn];int n;
char buf[nn];
int ans[nn];int tot;
void output()
{
	for(int i=0;i<n*2;i++)
	{
		if(ans[i]==0)
		for(int j=i+1;j<n*2;j++)
			if(ans[j]==0)
			{
				ans[i]=ans[j]=++tot;
				i=j;
				break;
			}
	}
	puts("Yes");
	for(int i=0;i<n*2;i++) printf("%d ",ans[i]);
	exit(0);
}
int cmp(vector<int> a,vector<int> b)
{
	return a.size()>b.size();
}
int main()
{
//	freopen("0.txt","r",stdin);
	cin>>n;int o=0;int N=n*2;
	scanf("%s",buf+1);assert(strlen(buf+1)==N-1);
	for(int i=1;i<2*n;i++) status[i]=buf[i]-'0',o+=status[i];
	status[0]=1;
	if(o==2*n-1)
	{
	
		if(n%2==1) err;
		for(int i=0;i<n*2;i+=4)
			ans[i]=ans[i+2]=++tot,ans[i+1]=ans[i+3]=++tot;
		output();
	}
//	if(o%2==0) err;
	vector<vector<int> >gg;
	for(int i=0;i<n*2;i++)
	{
		if(status[i]==0&&status[(i+1)%N]==1)
		{//	cout<<i;
			vector<int> b;b.push_back(i);
			for(int j=(i+1)%N;status[j];j=(j+1)%N) b.push_back(j);
			gg.push_back(b);
		}
	}
	sort(gg.begin(),gg.end(),cmp);
	int d2=0;
	for(int i=0;i<gg.size();i++) 
	{
	//	if(gg[i].size()>2) cout<<gg[i].size();
		d2+=gg[i].size()-2;
	}
	if(d2%2) err;//cout<<gg[0].size()<<" "<<gg[1].size()<<"\n";
	if(d2%4==2)
	{
		if(gg.size()<=1) err
		if(gg[0].size()>2 and gg[1].size()>2) 
		{
			int e1=gg[0].size()-2,e2=gg[1].size()-2;
			ans[gg[0][e1]]=ans[gg[1][e2]]=++tot;
			gg[0].erase(gg[0].begin()+e1);
			gg[1].erase(gg[1].begin()+e2);
			swap(gg[0][e1],gg[1][e2]);
		}
		else err;
	} 
	vector<int> v2;
	for(int i=0;i<gg.size();i++)
	{
		ans[gg[i][0]]=tot+i+1;
		ans[gg[i][gg[i].size()-1]]=tot+(i+1)%(int)(gg.size())+1;
		for(int k=1;k<gg[i].size()-1;k++)
			v2.push_back(gg[i][k]);
	}
	tot+=gg.size();
	for(int i=0;i<v2.size();i+=4)
	{
		ans[v2[i]]=ans[v2[i+2]]=++tot;
		ans[v2[i+1]]=ans[v2[i+3]]=++tot;
	}
	output(); 
}