#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define pdi pair<db,int>
#define mp make_pair
#define pb push_back
#define enter putchar('\n')
#define space putchar(' ')
#define eps 1e-8
#define MAXN 200005
#define mo 974711
//#define ivorysi
using namespace std;
typedef long long int64;
typedef double db;
template<class T>
void read(T &res) {
    res = 0;char c = getchar();T f = 1;
    while(c < '0' || c > '9') {
	if(c == '-') f = -1;
	c = getchar();
    }
    while(c >= '0' && c <= '9') {
	res = res * 10 + c - '0';
	c = getchar();
    }
    res *= f;
}
template<class T>
void out(T x) {
    if(x < 0) {x = -x;putchar('-');}
    if(x >= 10) {
	out(x / 10);
    }
    putchar('0' + x % 10);
}

int N,ans[MAXN],tot,t[MAXN],to[MAXN];
char s[MAXN];
vector<int> f;
bool vis[MAXN];
void Solve() {
    read(N);
    scanf("%s",s + 2);
    s[1] = '1';
    int cnt = 0;
    for(int i = 1 ; i < 2 * N ; ++i) {
	    if(s[i] == '1' && s[i + 1] == '1') {++cnt;t[i] = 1;}
    }
    if(s[2 * N] == '1') {++cnt;t[2 * N] = 1;}
    if(cnt & 1) {puts("No");return;}
    bool flag = 0;
    if(cnt % 4 != 0) {
	int a = 1,b = 2 * N;
	int c = 0;
	while(t[a] == 1 && a <= 2 * N) ++a;
	--a;

	while(t[b] == 1 && b >= 1) --b;
    	++b;
    	if(a > b) {puts("No");return;}
    	if(a >= 1 || b <= 2 * N) ++c;
    	for(int i = a + 1 ; i <= b - 1 ; ++i) {
    	    if(t[i] == 1 && t[i - 1] != 1) ++c;
    	}
    	if(c < 2) {puts("No");return;}
        if(c == 2 && a < 1 && b <= 2 * N) flag = 1;
    }
    puts("Yes");
    if(flag) {
        f.clear();
        int ano;
        for(int i = 1 ; i <= 2 * N ; ++i) {
            if(t[i] == 1) {
                ans[i] = ++tot;ans[2 * N] = tot;
                ano = i;
                break;
            }
        }
        int p = 2 * N;
        while(t[p] == 1) --p;
        ans[p] = ++tot;ans[1] = tot;
        for(int i = p + 1 ; i < 2 * N ; ++i) f.pb(i);
        p = ano;
        while(t[p] == 1) ++p;
        for(int i = ano + 1 ; i < p ; ++i) f.pb(i);
        while(1) {
            int h = p;
            while(s[h + 1] == '0') ++h;
            if(ans[h]) break;
            ans[h] = ++tot;ans[p] = tot;
            p = h + 1;
        }
        ans[p] = ++tot;ans[ano - 1] = tot;
        int siz = f.size();
        for(int i = 0 ; i < siz ; i += 4) {
            ans[f[i]] = ++tot;ans[f[i + 2]] = tot;
            ans[f[i + 1]] = ++tot;ans[f[i + 3]] = tot;
        }
        f.clear();
        for(int i = 1 ; i <= 2 * N ; ++i) if(!ans[i]) f.pb(i);
        siz = f.size();
        for(int i = 0 ; i < siz ; i += 2) {
            ans[f[i]] = ++tot;ans[f[i + 1]] = tot;
        }
        for(int i = 1 ; i <= 2 * N ; ++i) {out(ans[i]);space;}
        enter;
        return ;
    }
    if(cnt % 4 == 2) {

    	for(int i = 1 ; i <= 2 * N ; ++i) {
    	    if(t[i] == 1 && t[i - 1] == 0) f.pb(i);
    	}
    	ans[f[0]] = ++tot;ans[f[1]] = tot;
        to[f[0]] = f[1] + 1;to[f[1]] = f[0] + 1;
    	int k = f[1];
    	while(t[k] == 1) ++k;
    	ans[k] = ++tot;ans[f[1] - 1] = tot;
    	to[k] = f[1] - 1;to[f[1] - 1] = k;
    }

    int p = 1;
    f.clear();
    while(p <= 2 * N) {
    	vis[p] = 1;
    	if(t[p] && !ans[p]) f.pb(p);
    	if(p >= 2 * N) break;
    	if(to[p] && !vis[to[p]]) p = to[p];
    	else if(s[p + 1] == '1' && !vis[p + 1]) ++p;
    	else {
    	    int k = p;
    	    while(k < 2 * N && (s[k + 1] == '0' || vis[k])) ++k;
    	    ans[p] = ++tot;ans[k] = tot;
    	    p = k + 1;
    	    while(p <= 2 * N && vis[p]) ++p;
    	}

    }
    int siz = f.size();
    for(int i = 0 ; i < siz ; i += 4) {
        ans[f[i]] = ++tot;ans[f[i + 2]] = tot;
        ans[f[i + 1]] = ++tot;ans[f[i + 3]] = tot;
    }
    f.clear();
    for(int i = 1 ; i <= 2 * N ; ++i) {
    	if(!ans[i]) f.pb(i);
    }
    siz = f.size();
    for(int i = 0 ; i < siz ; i += 2) {
        ans[f[i]] = ++tot;ans[f[i + 1]] = tot;
    }
    for(int i = 1 ; i <= 2 * N ; ++i) {out(ans[i]);space;}
    enter;
}
int main() {
#ifdef ivorysi
    freopen("f1.in","r",stdin);
#endif
    Solve();
}


Measured memory_bytes: 4212