#include <bits/stdc++.h>
using namespace std;
const int INF = 1000000000;
const int dir_4[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
const int dir_8[8][2] = {{1, 0},  {1, 1},   {0, 1},  {-1, 1},
                         {-1, 0}, {-1, -1}, {0, -1}, {1, -1}};
int main() {
  static int N;
  static string s;
  cin >> N >> s;
  static int ans[200010] = {};
  vector<int> vec;
  int k = 0;
  int a, b, c, d;
  for (int i = 0; i < 2 * N - 1; i++) {
    if (s[i] == '0') {
      if (i == 0 || s[i - 1] == '1') {
        k++;
        ans[i] = k;
      } else
        vec.push_back(i);
    } else {
      if (i == 2 * N - 2 || (i != 0 && s[i - 1] == '0')) {
        ans[i] = k;
      }
    }
  }
  if (s[2 * N - 2] == '0') {
    ans[2 * N - 1] = k;
  }
  if (vec.size() % 2 == 1) {
    puts("No");
    return 0;
  }
  for (int i = 0; i < vec.size(); i++) {
    if (i % 2 == 0) k++;
    ans[vec[i]] = k;
  }
  int renketu = k;
  vec.clear();
  for (int i = 0; i < 2 * N; i++) {
    if (ans[i] == 0) vec.push_back(i);
  }
  if (vec.size() % 4 != 0) {
    a = -1;
    b = -1;
    for (int i = 0; i + 1 < vec.size(); i++) {
      if (vec[i] + 1 != vec[i + 1]) {
        a = vec[i] + 1;
        b = vec[i + 1] - 1;
      }
    }
    if (a == -1) {
      puts("No");
      return 0;
    }
    c = -1;
    d = -1;
    for (int i = 0; i < 2 * N; i++) {
      if (ans[i] != 0 && (i < a || b < i)) {
        if (i == 0 || ans[i - 1] == 0) c = i;
        if (i == 2 * N - 1 || ans[i + 1] == 0) d = i;
      }
    }
    if (c == -1) {
      puts("No");
      return 0;
    }
    swap(ans[b], ans[d]);
    k++;
    ans[a - 1] = k;
    ans[b + 1] = k;
  }
  vec.clear();
  for (int i = 0; i < 2 * N; i++) {
    if (ans[i] == 0) vec.push_back(i);
  }
  for (int i = 0; i < vec.size(); i++) {
    if (i % 4 == 0 || i % 4 == 2) {
      ans[vec[i]] = k + 1;
    } else
      ans[vec[i]] = k + 2;
    if (i % 4 == 3) k += 2;
  }
  puts("Yes");
  for (int i = 0; i < 2 * N; i++) {
    printf("%d%c", ans[i], (i == 2 * N - 1) ? '\n' : ' ');
  }
}
