#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:256000000")
using namespace std;
const int INF = 1000 * 1000 * 1000 + 21;
const long long int LLINF = (1ll << 60) + 5;
const int MOD = 1000 * 1000 * 1000 + 7;
const int MAX_N = 200 * 1000 + 228;
int n, nn;
char st[MAX_N];
string type;
int ans[MAX_N];
deque<deque<int>> gr11;
int cl = 1;
void yes() {
  printf("Yes\n");
  for (int i = 0; i < 2 * n; ++i) printf("%d%c", ans[i], " \n"[i == 2 * n - 1]);
  exit(0);
}
void no() {
  printf("No\n");
  exit(0);
}
int main() {
  scanf("%d", &n);
  scanf("%s", st);
  type = st;
  int rev = 0;
  if (type[0] == '0' && type.back() == '1')
    reverse(type.begin(), type.end()), rev = 1;
  type = "1" + type + "1";
  int cnt11 = 0;
  vector<int> a10, a01;
  vector<int> a00;
  gr11.push_back(deque<int>());
  for (int i = 0; i < 2 * n; ++i) {
    if (type[i] == '1' && type[i + 1] == '1') {
      gr11.back().push_back(i);
      ++cnt11;
    } else if (!gr11.back().empty())
      gr11.push_back(deque<int>());
    if (type[i] == '1' && type[i + 1] == '0') a10.push_back(i);
    if (type[i] == '0' && type[i + 1] == '1') a01.push_back(i);
    if (type[i] == '0' && type[i + 1] == '0') a00.push_back(i);
  }
  if (gr11.back().empty()) gr11.pop_back();
  if (cnt11 % 2) no();
  for (int i = 0; i < (int)a00.size(); i += 2) {
    ans[a00[i]] = cl;
    ans[a00[i + 1]] = cl;
    ++cl;
  }
  for (int i = 0; i < (int)a10.size(); ++i) {
    ans[a10[i]] = cl;
    ans[a01[i]] = cl;
    ++cl;
  }
  if (1 <= (int)gr11.size() && (int)gr11.size() <= 2 && gr11[0][0] == 0 &&
      gr11.back().back() == 2 * n - 1 && cnt11 % 4 == 2)
    no();
  if ((int)gr11.size() == 1 && cnt11 % 4 == 2) no();
  if (cnt11 % 4 == 2) {
    int u = gr11[0][0];
    int v = gr11[1][0];
    int ru = gr11[0].back() + 1;
    int rv = gr11[1].back() + 1;
    ans[u] = cl;
    ans[v] = cl;
    ++cl;
    swap(ans[ru], ans[rv]);
    gr11[0].pop_front();
    gr11[1].pop_front();
    swap(gr11[0], gr11[1]);
    if (gr11[1].empty()) swap(gr11[0], gr11[1]);
    while (!gr11.empty() && gr11[0].empty()) gr11.pop_front();
  }
  vector<int> go;
  assert(go.size() % 4 == 0);
  for (auto it = gr11.begin(); it != gr11.end(); ++it) {
    for (auto jt = it->begin(); jt != it->end(); ++jt) go.push_back(*jt);
  }
  for (int i = 0; i < (int)go.size(); i += 4) {
    ans[go[i]] = cl;
    ans[go[i + 2]] = cl;
    ++cl;
    ans[go[i + 1]] = cl;
    ans[go[i + 3]] = cl++;
    ++cl;
  }
  if (rev) reverse(ans, ans + 2 * n);
  yes();
  return 0;
}
