#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
const int MAXN = 100000;
const int MAXS = 2 * MAXN - 1;
int n;
char s[MAXS + 3];
int ans[2 * MAXN], nans;
void remove(vector<int> &lst, int val) {
  int idx = 0;
  while (idx < ((int)(lst).size()) && lst[idx] != val) ++idx;
  assert(idx < ((int)(lst).size()));
  lst.erase(lst.begin() + idx);
}
vector<int> none, both, lft, rgt;
bool solve() {
  for (int i = (0); i < (2 * n); ++i) ans[i] = -1;
  nans = 0;
  for (int i = (0); i < (2 * n); ++i)
    if (s[i] == '0' && s[i + 1] == '0')
      none.push_back(i);
    else if (s[i] == '0')
      rgt.push_back(i);
    else if (s[i + 1] == '0')
      lft.push_back(i);
    else
      both.push_back(i);
  if (((int)(lft).size()) != ((int)(rgt).size()) ||
      ((int)(none).size()) % 2 != 0 || ((int)(both).size()) % 2 != 0)
    return false;
  if (((int)(both).size()) % 4 == 2) {
    int at = 0;
    while (at <= 2 * n && s[at] == '1') ++at;
    if (at > 2 * n) return false;
    while (true) {
      while (at + 1 <= 2 * n && s[at + 1] == '0') ++at;
      if (at + 1 > 2 * n) return false;
      if (at + 2 <= 2 * n && s[at + 2] == '1')
        break;
      else
        at += 2;
    }
    int to = at + 1;
    while (to <= 2 * n && s[to] == '1') ++to;
    if (to > 2 * n) return false;
    int idx = 0;
    while (idx < ((int)(both).size()) && at + 1 <= both[idx] &&
           both[idx] <= to - 2)
      ++idx;
    if (idx >= ((int)(both).size())) return false;
    int a = at, b = to - 1, c = a + 1, d = both[idx];
    ans[a] = ans[b] = ++nans, ans[c] = ans[d] = ++nans;
    remove(rgt, a);
    remove(lft, b);
    remove(both, c);
    remove(both, d);
  }
  for (int i = (0); i < (((int)(lft).size())); ++i) {
    int a = lft[i], b = rgt[i];
    ans[a] = ans[b] = ++nans;
  }
  for (int i = 0; i < ((int)(none).size()); i += 2) {
    int a = none[i], b = none[i + 1];
    ans[a] = ans[b] = ++nans;
  }
  for (int i = 0; i < ((int)(both).size()); i += 4) {
    int a = both[i], b = both[i + 1], c = both[i + 2], d = both[i + 3];
    ans[a] = ans[c] = ++nans;
    ans[b] = ans[d] = ++nans;
  }
  return true;
}
void run() {
  scanf("%d%s", &n, s + 1);
  s[0] = '1';
  s[2 * n] = '1';
  s[2 * n + 1] = '\0';
  if (!solve()) {
    printf("No\n");
    return;
  }
  printf("Yes\n");
  for (int i = (0); i < (2 * n); ++i) {
    if (i != 0) printf(" ");
    printf("%d", ans[i]);
  }
  puts("");
}
int main() {
  run();
  return 0;
}
