#include <bits/stdc++.h>
using namespace std;
inline vector<int> solve_all_one(int n) {
	vector<int> res(2 * n);
	for (int i = 0, c = 1; i < 2 * n; i += 4, c += 2) {
		res[i] = res[i + 2] = c;
		res[i + 1] = res[i + 3] = c + 1;
	}
	return res;
}
inline vector<int> solve_sum_4k(int n, int sum, vector<pair<int, int> > vs) {
	vector<int> res(2 * n, 0), tv = solve_all_one(sum / 2);
	int c = sum / 2 + 1, lst = 0, pos = 0;
	for (auto P : vs) {
		res[(P.first - 1 + 2 * n) % (2 * n)] = lst;
		res[P.second] = c;
		lst = c++;
		for (int i = P.first; i != P.second; i = (i + 1) % (2 * n)) {
			res[i] = tv[pos++];
		}
	}
	res[(vs[0].first - 1 + 2 * n) % (2 * n)] = lst;
	for (int i = 0, f = 0; i < 2 * n; i++)
		if (!res[i]) {
			res[i] = c + f / 2;
			f++;
		}
	return res;
}
int n;
char S[200005];
int main() {
	scanf("%d %s", &n, S + 1);
	S[0] = '1';
	int all_one = 1;
	for (int i = 0; i < 2 * n; i++) if (S[i] == '0') { all_one = 0; break; }
	if (all_one) {
		if (n & 1) {
			puts("No");
			return 0;
		}
		vector<int> ans = solve_all_one(n);
		puts("Yes");
		for (int i = 0; i < 2 * n; i++)
			printf("%d%c", ans[i], " \n"[i == 2 * n - 1]);
		return 0;
	}
	vector<pair<int, int> > vs;
	for (int i = 0, l = -1; i <= 2 * n; i++) {
		if (S[i] != '1') {
			if (l == -1) continue;
			vs.push_back(make_pair(l, i - 1));
			l = -1;
		} else if (l == -1) l = i;
	}
	if (vs.size() > 1 && vs[0].first == 0 && vs.back().second == 2 * n - 1) {
		vs[0].first = vs.back().first;
		vs.pop_back();
	}
	int sum = 0, g1 = 0;
	for (auto P : vs) {
		int x = (P.second - P.first + 1 + 2 * n) % (2 * n);
		if (x > 1) g1++;
		sum += x - 1;
	}
	if (sum & 1) {
		puts("No");
		return 0;
	}
	if (sum % 4 == 0) {
		vector<int> ans = solve_sum_4k(n, sum, vs);
		puts("Yes");
		for (int i = 0; i < 2 * n; i++)
			printf("%d%c", ans[i], " \n"[i == 2 * n - 1]);
		return 0;
	}
	if (g1 >= 2) {
		int p1 = -1, p2 = -1;
		for (int i = 0; i < (int)vs.size(); i++) {
			pair<int, int> P = vs[i];
			int x = (P.second - P.first + 1 + 2 * n) % (2 * n);
			if (x > 1) {
				if (p1 == -1) p1 = i;
				else {
					p2 = i;
					break;
				}
			}
		}
		vs[p1].second = (vs[p1].second - 1 + 2 * n) % (2 * n);
		vs[p2].second = (vs[p2].second - 1 + 2 * n) % (2 * n);
		sum -= 2;
		vector<int> ans = solve_sum_4k(n, sum, vs);
		swap(ans[vs[p1].second], ans[vs[p2].second]);
		swap(ans[vs[p1].second], ans[(vs[p1].second + 1) % (2 * n)]);
		swap(ans[vs[p2].second], ans[(vs[p2].second + 1) % (2 * n)]);
		if (ans[vs[p1].second] != ans[vs[p2].second]) {
			for (int i = 0; i < 2 * n; i++)
				if (i != vs[p1].second && ans[i] == ans[vs[p1].second]) {
					swap(ans[i], ans[vs[p2].second]);
					break;
				}
		}
		puts("Yes");
		for (int i = 0; i < 2 * n; i++)
			printf("%d%c", ans[i], " \n"[i == 2 * n - 1]);
		return 0;
	}
	puts("No");
	return 0;
}