#include <bits/stdc++.h>
using namespace std;
int n, arr[555555], len, sum, nonzro, cnt, pos, pre, ps[555555], ct, anf,
    ans[555555], pnf;
bool f1, f2;
struct segment {
  int l, r, leng;
} sg[555555];
char s[555555];
int main() {
  scanf("%d%s", &n, s);
  for (int i = 1; i < 2 * n; i++) arr[i] = s[i - 1] - '0';
  arr[2 * n] = 1;
  for (int i = 2 * n; i >= 1; i--) {
    if (!arr[i]) break;
    len++;
  }
  if (len == 2 * n) {
    if (n & 1)
      printf("No\n");
    else {
      printf("Yes\n");
      for (int i = 1; i <= n / 2; i++) {
        printf("%d %d %d %d ", i * 2 - 1, i * 2, i * 2 - 1, i * 2);
      }
    }
    return 0;
  }
  for (int i = 2 * n; i > len; i--) arr[i] = arr[i - len];
  for (int i = 1; i <= len; i++) arr[i] = 1;
  pos = 1;
  while (pos <= 2 * n) {
    pre = pos;
    while (pos <= 2 * n && arr[pos]) pos++;
    sg[++cnt] = (segment){pre, pos - 1, pos - 1 - pre};
    sum += sg[cnt].leng;
    if (sg[cnt].leng) nonzro++;
    while (pos <= 2 * n && !arr[pos]) pos++;
  }
  if (sum & 1) {
    printf("No\n");
    return 0;
  }
  if (sum % 4 == 0) {
    for (int i = 1; i <= cnt; i++) {
      for (int j = sg[i].l + 1; j <= sg[i].r; j++) {
        ps[++ct] = j;
      }
      anf++;
      ans[sg[i].r + 1] = anf;
      if (i == cnt)
        ans[sg[1].l] = anf;
      else
        ans[sg[i + 1].l] = anf;
    }
    for (int i = 1; i <= ct; i += 4) {
      ans[ps[i]] = anf + 1;
      ans[ps[i + 1]] = anf + 2;
      ans[ps[i + 2]] = anf + 1;
      ans[ps[i + 3]] = anf + 2;
      anf += 2;
    }
    ct = 0;
    for (int i = 1; i <= 2 * n; i++) {
      if (!ans[i]) ps[++ct] = i;
    }
    for (int i = 1; i <= ct; i += 2) {
      ans[ps[i]] = anf + 1;
      ans[ps[i + 1]] = anf + 1;
      anf++;
    }
    printf("Yes\n");
    for (int i = 1; i <= 2 * n; i++) {
      printf("%d ", ans[(i + len - 1) % (2 * n) + 1]);
    }
  } else {
    if (nonzro <= 1) {
      printf("No\n");
      return 0;
    }
    anf = 1;
    if (cnt == 2) {
      for (int j = sg[1].l + 2; j <= sg[1].r; j++) ps[++ct] = j;
      for (int j = sg[2].l + 2; j <= sg[2].r; j++) ps[++ct] = j;
      ans[sg[1].l + 1] = ans[sg[2].l + 1] = 1;
      ans[sg[1].l] = ans[sg[1].r + 1] = 2;
      ans[sg[2].l] = ans[sg[2].r + 1] = 3;
      anf = 3;
    } else {
      for (int i = 1; i <= cnt; i++) {
        if (sg[i].leng) {
          if (f1 & f2) {
            for (int j = sg[i].l + 1; j <= sg[i].r; j++) {
              ps[++ct] = j;
            }
            anf++;
            ans[sg[i].r + 1] = anf;
            if (i == cnt)
              ans[sg[1].l] = anf;
            else
              ans[sg[i + 1].l] = anf;
          } else {
            for (int j = sg[i].l + 2; j <= sg[i].r; j++) {
              ps[++ct] = j;
            }
            ans[sg[i].l + 1] = 1;
            if (!f1) {
              pnf = anf + 1;
              anf += 2;
              ans[sg[i].r + 1] = anf;
              ans[sg[i + 1].l] = anf;
            } else {
              if (i == cnt)
                ans[sg[1].l] = ans[sg[i].l];
              else
                ans[sg[i + 1].l] = ans[sg[i].l];
              ans[sg[i].l] = ans[sg[i].r + 1] = pnf;
            }
            if (!f1)
              f1 = 1;
            else
              f2 = 1;
          }
        } else {
          anf++;
          ans[sg[i].r + 1] = anf;
          if (i == cnt)
            ans[sg[1].l] = anf;
          else
            ans[sg[i + 1].l] = anf;
        }
      }
    }
    for (int i = 1; i <= ct; i += 4) {
      ans[ps[i]] = anf + 1;
      ans[ps[i + 1]] = anf + 2;
      ans[ps[i + 2]] = anf + 1;
      ans[ps[i + 3]] = anf + 2;
      anf += 2;
    }
    ct = 0;
    for (int i = 1; i <= 2 * n; i++) {
      if (!ans[i]) ps[++ct] = i;
    }
    for (int i = 1; i <= ct; i += 2) {
      ans[ps[i]] = anf + 1;
      ans[ps[i + 1]] = anf + 1;
      anf++;
    }
    printf("Yes\n");
    for (int i = 1; i <= 2 * n; i++) {
      printf("%d ", ans[(i + len - 1) % (2 * n) + 1]);
    }
  }
  return 0;
}
