#include <bits/stdc++.h>
using namespace std;
const int maxn = 200005;
int n, m, cnt;
int ans[maxn];
vector<int> pos[maxn], apos;
char s[maxn];
int main() {
  scanf("%d%s", &n, s);
  s[2 * n - 1] = '1';
  for (int i = 0; i < 2 * n; i++)
    if (s[i] == '1') {
      int j = i;
      while (j < 2 * n && s[j] == '1') j++;
      for (int k = i; k < j; k++) pos[m].push_back(k);
      m++;
      i = j - 1;
    }
  if (s[0] == '1' && m > 1) {
    for (int k = 0; k < int(pos[0].size()); k++)
      pos[m - 1].push_back(pos[0][k]);
    pos[0] = pos[m - 1];
    m--;
  }
  int sum = 0;
  for (int i = 0; i < m; i++) sum += int(pos[i].size()) - 1;
  if (m == 1) sum++;
  if (sum & 1) {
    puts("No");
    return 0;
  }
  int last = -1, fir = -1;
  if (sum % 4 == 2) {
    if (m == 1) {
      puts("No");
      return 0;
    }
    bool f = false;
    for (int i = 0; i < m && (!f); i++)
      for (int j = i + 1; j < m && (!f); j++)
        if (int(pos[i].size()) > 1 && int(pos[j].size()) > 1) {
          f = true;
          fir = pos[i][0];
          ans[pos[i][1]] = ans[pos[j][1]] = ++cnt;
          for (int k = 2; k < int(pos[j].size()); k++)
            apos.push_back(pos[j][k]);
          last = (pos[j].back() + 1) % (2 * n);
          ans[last] = ans[pos[j][0]] = ++cnt;
          for (int k = 2; k < int(pos[i].size()); k++)
            apos.push_back(pos[i][k]);
          last = (pos[i].back() + 1) % (2 * n);
          for (int p = 0; p < m; p++)
            if (p != i && p != j) {
              ans[last] = ans[pos[p][0]] = ++cnt;
              for (int k = 1; k < int(pos[p].size()); k++)
                apos.push_back(pos[p][k]);
              last = (pos[p].back() + 1) % (2 * n);
            }
        }
    if (!f) {
      puts("No");
      return 0;
    }
  } else {
    if (m == 1) {
      puts("Yes");
      for (int i = 0; i < n / 2; i++)
        printf("%d %d %d %d ", 2 * i + 1, 2 * i + 2, 2 * i + 1, 2 * i + 2);
      puts("");
      return 0;
    }
    for (int i = 0; i < m; i++) {
      if (fir < 0) fir = pos[i][0];
      if (last >= 0) ans[last] = ans[pos[i][0]] = ++cnt;
      for (int k = 1; k < int(pos[i].size()); k++) apos.push_back(pos[i][k]);
      last = (pos[i].back() + 1) % (2 * n);
    }
  }
  puts("Yes");
  if (fir >= 0 && last >= 0) ans[fir] = ans[last] = ++cnt;
  for (int i = 0; i < int(apos.size()); i += 4) {
    ans[apos[i]] = ans[apos[i + 2]] = cnt + 1;
    ans[apos[i + 1]] = ans[apos[i + 3]] = cnt + 2;
    cnt += 2;
  }
  int c = 0;
  for (int i = 0; i < 2 * n; i++) {
    if (ans[i] == 0) {
      if (c == 0)
        ans[i] = ++cnt, c = 1;
      else
        ans[i] = cnt, c = 0;
    }
    printf("%d%c", ans[i], i == 2 * n - 1 ? '\n' : ' ');
  }
  return 0;
}
