#include<stdio.h>
#include<vector>
#include<stdlib.h>

#define SZ(v) ((int)v.size())
#define pb push_back
using namespace std;
typedef vector<int> VI;

const int N=200005;
VI li[N],id;
char s[N];
int n,m,L,ec,sum,mark[N];

void markit(){
    for(int i=0;i<<2<id.size();i++){
        for(int j:{0,1})for(int k:{0,1})mark[id[i<<2|j<<1|k]]=ec+k+1;
        ec+=2;
    }
}
void output(){
    puts("Yes");
    for(int i=0;i<L;i++){
        if(!mark[i])mark[i]=ec<0?-ec:++ec,ec=-ec;
        printf("%d ",mark[i]);
    }
    exit(0);
}

int main(){
    scanf("%d",&n);scanf("%s",s+1);s[0]='1';L=n<<1;
    for(int i=0,j;i<L;i++)if(s[i]=='0'&&s[(i+1)%L]=='1'){
        for(li[m].pb(i),j=(i+1)%L;s[j]=='1';j=(j+1)%L)li[m].pb(j);
        m++;
    }
    if(!m){
        if(~n&1){
            for(int i=0;i<L;i++)id.pb(i);
            markit();output();
        }else puts("No"),exit(0);
    }
    for(int i=0;i<m;i++)sum+=SZ(li[i])-2;
    if(sum&1)puts("No"),exit(0);
    if(sum&2){
        for(int i=0;i<m;i++)if(SZ(li[i])>2)li[m-1].swap(li[i]);
        for(int i=0;i<m-1;i++)if(SZ(li[i])>2){
            VI&a=li[i],&b=li[m-1];
            int la=SZ(a)-1,lb=SZ(b)-1,ea=a[la],eb=b[lb];
            mark[a[la-1]]=mark[b[lb-1]]=++ec;
            a.pop_back();b.pop_back();a.pop_back();b.pop_back();a.push_back(eb);b.push_back(ea);
            sum-=2;
            break;
        }
        if(sum&2)puts("No"),exit(0);
    }
    for(int i=0;i<m;i++){
        mark[li[i][0]]=ec+1+i;
        mark[li[i][SZ(li[i])-1]]=ec+1+(i+1)%m;
        for(int j=1;j<SZ(li[i])-1;j++)id.pb(li[i][j]);
    }
    ec+=m;markit();output();
    return 0;
}