#include <bits/stdc++.h>
using namespace std;
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[200005], tot, t[200005], to[200005];
char s[200005];
vector<int> f;
bool vis[200005];
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;
  }
  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) {
      puts("No");
      return;
    }
  }
  if (cnt % 4 == 2) {
    for (int i = 1; i <= 2 * N; ++i) {
      if (t[i] == 1 && t[i - 1] == 0) f.push_back(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;
  }
  puts("Yes");
  int p = 1;
  f.clear();
  while (p <= 2 * N) {
    vis[p] = 1;
    if (t[p] && !ans[p]) f.push_back(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.push_back(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]);
    putchar(' ');
  }
  putchar('\n');
}
int main() { Solve(); }
