#include <bits/stdc++.h>
using namespace std;
int A[200005];
char str[200005];
int to[200005], back[200005];
int main() {
  int n;
  scanf("%d", &n);
  scanf("%s", &str);
  string S = "1";
  S += str;
  S += "1";
  int cnt = 0;
  vector<int> vec;
  for (int i = 0; i < S.size() - 1; i++) {
    if (S[i] == '1' && S[i + 1] == '1') {
      cnt++;
      vec.push_back(i);
    }
  }
  if (cnt % 2 == 1) {
    puts("No");
    return 0;
  }
  if (cnt == 2) {
    for (int i = 1; i < S.size() - 1; i++) {
      if (S[i - 1] == '1' && S[i] == '1' && S[i + 1] == '1') {
        puts("No");
        return 0;
      }
    }
  }
  int sz = 0;
  memset(to, -1, sizeof(to));
  memset(back, -1, sizeof(back));
  memset(A, -1, sizeof(A));
  for (int i = 0; i < vec.size() / 2; i++) {
    int f = vec[i], s = vec[i + vec.size() / 2];
    A[f] = A[s] = sz;
    sz++;
    to[f] = s + 1;
    to[s] = f + 1;
    back[f + 1] = s;
    back[s + 1] = f;
  }
  vector<pair<int, int> > vx;
  for (int i = 0; i < S.size(); i++) {
    if (S[i] == '1' && back[i] == -1) {
      int f = i - 1;
      int s = i;
      while (to[s] != -1) s = to[s];
      vx.push_back(pair<int, int>(f, s));
    }
  }
  for (int i = 0; i + 1 < vx.size(); i++) {
    pair<int, int> p = vx[i];
    if (p.second == 2 * n) {
      if (i == 0) {
        puts("No");
        return 0;
      }
      swap(vx[i], vx[vx.size() - 1]);
      break;
    }
  }
  for (int i = 0; i + 1 < vx.size(); i++) {
    pair<int, int> p = vx[i], q = vx[i + 1];
    A[q.first] = A[p.second] = sz;
    sz++;
  }
  cnt = 0;
  for (int i = 0; i < 2 * n; i++) {
    if (A[i] == -1) {
      A[i] = sz;
      if (cnt == 1)
        cnt = 0, sz++;
      else
        cnt = 1;
    }
  }
  puts("Yes");
  for (int i = 0; i < 2 * n; i++) {
    if (i != 0) printf(" ");
    printf("%d", A[i] + 1);
  }
  puts("");
  return 0;
}
