#include <bits/stdc++.h>
using namespace std;
#define ri rd<int>
#define rep(i, a, b) for (int i = (a), _ = (b); i <= _; ++i)
#define per(i, a, b) for (int i = (a), _ = (b); i >= _; --i)
#define For(i, a, b) for (int i = (a), _ = (b); i < _; ++i)
const int maxN = 2e5 + 7;

template<class T> T rd() {
	bool f = 1; char c = getchar(); for (; !isdigit(c); c = getchar()) if (c == '-') f = 0;
	T x = 0; for (; isdigit(c); c = getchar()) x = x * 10 + c - '0'; return f ? x : -x;
}

void NIE() {
	puts("No");
	exit(0);
}

int n;
char a[maxN];
list<int> seg[maxN]; int tt;
int col[maxN], tc;

void debug(list<int> l) {
	for (int x : l) cerr << x << " ";
	cerr << endl;
}

void debug(int x) {
	debug(seg[x]);
}

void color(list<int> seg) {
	vector<int> v;
	for (int x : seg) v.push_back(x);
	For (i, 0, v.size() / 2) col[v[i]] = col[v[i + v.size() / 2]] = ++tc;
	int tp = 1;
	for (int i = 1; i <= n; ++i) if (!col[i]) {
		col[i] = tp ? ++tc : tc;
		tp ^= 1;
	}
	assert(tp == 1);
}

int main() {

	n = ri() << 1;
	scanf("%s", a+1); a[0] = a[n] = '1';
	
	seg[tt = 1].push_back(0);
	rep (i, 1, n+1) { 
		if (a[i-1] == '1')
			seg[tt].push_back(i);
		else if (a[i-1] == '0' && a[i] == '1')
			seg[++tt].push_back(i);
	}
//	cerr << seg[1].front() << " " << seg[tt].back() << endl;
	if (1 != tt) {
		seg[tt].pop_back(); seg[1].pop_front();
		seg[tt].splice(seg[tt].end(), seg[1]);
		if (seg[tt].empty()) --tt;
	}
	else seg[tt = 2] = seg[1];
	{
		int sum = 0, x = 0, y = 0;
		rep (i, 2, tt) { 
			sum += seg[i].size() - 2;
			if (seg[i].size() > 2) {
				if (!x) x = i;
				else y = i;
			}
		}
		if (sum & 1) NIE();
		if (sum % 4 == 2) {
			if (!y) NIE();
			int a = seg[x].back(); seg[x].pop_back();
			int b = seg[y].back(); seg[y].pop_back();
			int u = seg[x].back(); seg[x].pop_back();
			int v = seg[y].back(); seg[y].pop_back();
			col[u] = col[v] = ++tc;
			seg[x].push_back(b);
			seg[y].push_back(a);
			sum -= 2;
		}
		For (i, 2, tt) {
			int u = seg[2].back(); seg[2].pop_back();	
			int v = seg[i+1].front(); seg[i+1].pop_front();
			col[u] = col[v] = ++tc;
			seg[2].splice(seg[2].end(), seg[i+1]);
		}
		int u = seg[2].back(); seg[2].pop_back();
		int v = seg[2].front(); seg[2].pop_front();
		if (v != 0) col[u] = col[v] = ++tc;
		assert(seg[2].size() % 4 == 0);
		color(seg[2]);
	}
	puts("Yes");
	rep (i, 1, n) printf("%d%c", col[i], " \n"[i == n]);

	return 0;
}
