#include<bits/stdc++.h>
using namespace std;
int n,arr[555555],len,sum,nonzro,cnt,pos,pre,ps[555555],ct,anf,ans[555555],pnf;
bool f1,f2;
struct segment
{
	int l,r,leng;
}sg[555555];
char s[555555];
int main()
{
	scanf("%d%s",&n,s);
	for (int i=1;i<2*n;i++) arr[i]=s[i-1]-'0';
	arr[2*n]=1;
	for (int i=2*n;i>=1;i--)
	{
		if (!arr[i]) break;
		len++;
	}
	if (len==2*n)
	{
		if (n&1) printf("No\n");
		else
		{
			printf("Yes\n");
			for (int i=1;i<=n/2;i++)
			{
				printf("%d %d %d %d ",i*2-1,i*2,i*2-1,i*2);
			} 
		}
		return 0;
	}
	for (int i=2*n;i>len;i--) arr[i]=arr[i-len];
	for (int i=1;i<=len;i++) arr[i]=1;
	pos=1;
	while(pos<=2*n)
	{
		pre=pos;
		while(pos<=2*n && arr[pos]) pos++;
		sg[++cnt]=(segment){pre,pos-1,pos-1-pre};
		sum+=sg[cnt].leng;
		if (sg[cnt].leng) nonzro++;
		while(pos<=2*n && !arr[pos]) pos++;
	}
	if (sum&1) 
	{
		printf("No\n");
		return 0;
	}
	if (sum%4==0)
	{
		for (int i=1;i<=cnt;i++)
		{
			for (int j=sg[i].l+1;j<=sg[i].r;j++)
			{
				ps[++ct]=j;
			}
			anf++;
			ans[sg[i].r+1]=anf;
			if (i==cnt) ans[sg[1].l]=anf;
			else ans[sg[i+1].l]=anf;
		}
		for (int i=1;i<=ct;i+=4)
		{
			ans[ps[i]]=anf+1;
			ans[ps[i+1]]=anf+2;
			ans[ps[i+2]]=anf+1;
			ans[ps[i+3]]=anf+2;
			anf+=2;
		}
		ct=0;
		for (int i=1;i<=2*n;i++)
		{
			if (!ans[i]) ps[++ct]=i;
		}
		for (int i=1;i<=ct;i+=2)
		{
			ans[ps[i]]=anf+1;
			ans[ps[i+1]]=anf+1;
			anf++;
		}
		printf("Yes\n");
		for (int i=1;i<=2*n;i++) 
		{
			printf("%d ",ans[(i+len-1)%(2*n)+1]);
		}
	}
	else
	{
		if (nonzro<=1) 
		{
			printf("No\n");
			return 0;
		}
		anf=1;
		if (cnt==2)
		{
			for (int j=sg[1].l+2;j<=sg[1].r;j++) ps[++ct]=j;
			for (int j=sg[2].l+2;j<=sg[2].r;j++) ps[++ct]=j;
			ans[sg[1].l+1]=ans[sg[2].l+1]=1;
			ans[sg[1].l]=ans[sg[1].r+1]=2;
			ans[sg[2].l]=ans[sg[2].r+1]=3;
			anf=3;
		}
		else
		{
			for (int i=1;i<=cnt;i++)
			{
				if (sg[i].leng)
				{
					if (f1&f2) 
					{
						for (int j=sg[i].l+1;j<=sg[i].r;j++)
						{
							ps[++ct]=j;
						}
						anf++;
						ans[sg[i].r+1]=anf;
						if (i==cnt) ans[sg[1].l]=anf;
						else ans[sg[i+1].l]=anf;
					}
					else
					{
						ans[sg[i].l+1]=1;
						if (!f1)
						{
							for (int j=i+1;j<=cnt;j++)
							{
								if (sg[j].leng) 
								{
									pos=j;
									break;
								}
							}
							for (int j=sg[pos].l+2;j<=sg[pos].r;j++) ps[++ct]=j;
							for (int j=sg[i].l+2;j<=sg[i].r;j++)
							{
								ps[++ct]=j;
							}
							pnf=anf+1;
							anf+=2;
							ans[sg[i].r+1]=anf;
							ans[sg[i+1].l]=anf;		
						}
						else
						{
							if (i==cnt) ans[sg[1].l]=ans[sg[i].l];
							else ans[sg[i+1].l]=ans[sg[i].l];
							ans[sg[i].l]=ans[sg[i].r+1]=pnf;
						}
						if (!f1) f1=1;
						else f2=1;
					}
				}
				else
				{
					anf++;
					ans[sg[i].r+1]=anf;
					if (i==cnt) ans[sg[1].l]=anf;
					else ans[sg[i+1].l]=anf;
				}
			}
		}
		for (int i=1;i<=ct;i+=4)
		{
			ans[ps[i]]=anf+1;
			ans[ps[i+1]]=anf+2;
			ans[ps[i+2]]=anf+1;
			ans[ps[i+3]]=anf+2;
			anf+=2;
		}
		ct=0;
		for (int i=1;i<=2*n;i++)
		{
			if (!ans[i]) ps[++ct]=i;
		}
		for (int i=1;i<=ct;i+=2)
		{
			ans[ps[i]]=anf+1;
			ans[ps[i+1]]=anf+1;
			anf++;
		}
		printf("Yes\n");
		for (int i=1;i<=2*n;i++) 
		{
			printf("%d ",ans[(i+len-1)%(2*n)+1]);
		}
	}
	return 0;
}

Measured memory_bytes: 8320