#include<bits/stdc++.h>
using namespace std;
 
#define rep(i,n) for(int i=0;i<(n);i++)
#define REP(i,n) for(int i=1;i<=(n);i++)
#define mp make_pair
#define pb push_back
#define fst first
#define snd second
typedef long long ll;
typedef pair<int,int> pii;

int n,cnt=1,ans[200007];
string st;
vector<int> pos[2][2],s11;

void print(){puts("Yes"); rep(i,n+n) printf("%d ",ans[i]); exit(0);}
void erase(vector<int> &v,int x){v.erase(find(v.begin(),v.end(),x));}

int main()
{
	cin>>n>>st;st="1"+st+"1";
	rep(i,n+n) pos[st[i]-'0'][st[i+1]-'0'].pb(i);
	
	if(pos[1][1].size()==n+n)
	{
		if(n&1) {puts("No"); return 0;}
		rep(i,pos[1][1].size()) {ans[pos[1][1][i]]=cnt+(i&1); if((i&3)==3)cnt+=2;}
		print();
	}
	
	if(pos[1][1].size()&1){puts("No"); return 0;}
	if(pos[1][1].size()%4==0)
	{
		rep(i,pos[1][0].size()) ans[pos[1][0][i]]=ans[pos[0][1][i]]=cnt++;
		rep(i,pos[0][0].size()) {ans[pos[0][0][i]]=cnt; if(i&1) cnt++;}
		rep(i,pos[1][1].size()) {ans[pos[1][1][i]]=cnt+(i&1); if((i&3)==3)cnt+=2;}
		print();
	}
	
	int a=0;while(a<=n+n&&st[a]=='1')a++;
	if(a>n+n){puts("No");return 0;}
	while(1)
	{
		while(a<n+n&&st[a+1]=='0')a++;
		if(a>=n+n){puts("No");return 0;}
		if(a+2<=n+n&&st[a+2]=='1') break;
		a+=2;
	}
	int b=a+1;while(b<=n+n&&st[b]=='1')b++;
	if(b>n+n){puts("No");return 0;}
	int p=0;while(p<pos[1][1].size()&&pos[1][1][p]>a&&pos[1][1][p]<b-1) p++;
	if(p>=pos[1][1].size()){puts("No");return 0;}
	while(p+1<pos[1][1].size()&&pos[1][1][p+1]<a) p++;
	int x=a,y=b-1,z=a+1,w=pos[1][1][p];
	erase(pos[0][1],x);erase(pos[1][0],y);ans[x]=ans[y]=cnt++;
	erase(pos[1][1],z);erase(pos[1][1],w);ans[z]=ans[w]=cnt++;
	
	
	rep(i,pos[1][0].size()) ans[pos[1][0][i]]=ans[pos[0][1][i]]=cnt++;
	rep(i,pos[0][0].size()) {ans[pos[0][0][i]]=cnt; if(i&1) cnt++;}
	rep(i,pos[1][1].size()) {ans[pos[1][1][i]]=cnt+(i&1); if((i&3)==3)cnt+=2;}
	print();
	return 0;
}