#include <bits/stdc++.h>
using namespace std;
set<int> p1[2];
int ans[100008 * 2];
char buf[100008 * 2];
int status[100008 * 2];
int fork[100008 * 2];
int to[100008 * 2];
int n;
int tot;
int vis[100008 * 2];
int check() {
  return 1;
  for (int i = 0; i < n; i++)
    if (!ans[i]) return 0;
  int now = -1;
  while (1) {
    cout << now;
    if (now == n) break;
    vis[now + 1] = 1;
    now = to[now + 1];
    if (!now) break;
  }
  for (int i = 1; i <= n; i++)
    if (vis[i] != status[i]) return 0;
  return 1;
}
int solve() {
  tot = 0;
  p1[0].clear(), p1[1].clear();
  memset(to, 0, sizeof(to));
  memset(ans, 0, sizeof(ans));
  if (p1[0].size() or p1[1].size()) return 0;
  ;
  for (int i = 0; i <= n; i++)
    if (fork[i + 1] == 0) p1[status[i]].insert(i);
  for (int i = 0; i <= n; i++) {
    if (fork[i + 1] == 0 and ans[i] == 0) {
      int t = status[i];
      p1[t].erase(i);
      if (!p1[t].size()) return 0;
      ;
      int nxt = *p1[t].begin();
      p1[t].erase(nxt);
      t = i;
      to[t] = nxt, to[nxt] = t;
      ans[nxt] = ans[t] = ++tot;
    }
  }
  if (p1[0].size() or p1[1].size()) return 0;
  ;
  for (int i = 0; i <= n; i++)
    if (fork[i + 1] == 1) p1[status[i]].insert(i);
  if (p1[0].size() != p1[1].size()) return 0;
  ;
  int u0 = p1[0].size() / 2;
  int u1 = p1[0].size() - u0;
  set<int> waste;
  while (u0--) waste.insert(*p1[0].begin()), p1[0].erase(p1[0].begin());
  while (u1--) waste.insert(*p1[1].begin()), p1[1].erase(p1[1].begin());
  for (int i = 0; i <= n; i++) {
    if (fork[i + 1] == 1 and ans[i] == 0 and waste.count(i)) {
      int t = status[i];
      t = !t;
      if (!p1[t].size()) return 0;
      ;
      int nxt = *p1[t].begin();
      p1[t].erase(nxt);
      t = i;
      to[t] = nxt, to[nxt] = t;
      ans[nxt] = ans[t] = ++tot;
    }
  }
  return 1;
}
int main() {
  scanf("%d", &n);
  n = n * 2 - 1;
  scanf("%s", buf + 1);
  for (int i = 1; i <= n; i++) status[i] = buf[i] - '0';
  status[0] = 1;
  fork[0] = 1;
  for (int i = 1; i <= n; i++) fork[i] = status[i] ^ status[i - 1];
  fork[n + 1] = 1;
  if (solve() && check()) {
    puts("Yes");
    for (int i = 0; i <= n; i++) printf("%d ", ans[i]);
    exit(0);
  }
  fork[n + 1] = 0;
  if (solve() && check()) {
    puts("Yes");
    for (int i = 0; i < n; i++) printf("%d ", ans[i]);
    exit(0);
  }
  puts("No");
}
