#include <bits/stdc++.h>
using std::cerr;
using std::cin;
using std::cout;
using std::map;
using std::pair;
using std::set;
using std::string;
using std::vector;
int n;
string s;
vector<int> res;
bool solve() {
  res.assign(2 * n, -1);
  int r = 0;
  while (r < s.length() && s[r] == '1') r++;
  if (r == s.length()) {
    if (n % 2 == 1) {
      return 0;
    }
    for (int i = 0; i < n / 2; i++) {
      res[4 * i] = res[4 * i + 2] = 2 * i;
      res[4 * i + 1] = res[4 * i + 3] = 2 * i + 1;
    }
    return 1;
  }
  int l = s.length() - 1;
  while (s[l] == '1') l--;
  l++;
  vector<vector<pair<int, int>>> sq(4);
  sq[(2 * n + r - l + 3) % 4].push_back({l, r});
  for (int ll = 0; ll < l; ll++) {
    if (s[ll] == '1' && s[ll - 1] == '0') {
      int rr = ll;
      while (s[rr] == '1') rr++;
      sq[(rr - ll + 3) % 4].push_back({ll, rr});
    }
  }
  vector<int> c(2 * n, -1);
  for (auto ls : sq) {
    for (auto item : ls) {
      c[item.first] = (item.first + 1) % (2 * n);
    }
  }
  int k = 0;
  for (int i = 3; i > 0; i--) {
    while (sq[i].size() > 0) {
      auto aa = sq[i].back();
      sq[i].pop_back();
      int j = i;
      while (j > 0 && sq[j].size() == 0) j--;
      if (j == 0) {
        return 0;
      }
      auto bb = sq[j].back();
      sq[j].pop_back();
      if (i == 3 && j == 1) {
        int x = c[aa.first];
        c[aa.first] = (c[aa.first] + 1) % (2 * n);
        int y = c[aa.first];
        c[aa.first] = (c[aa.first] + 1) % (2 * n);
        int z = c[aa.first];
        c[aa.first] = (c[aa.first] + 1) % (2 * n);
        res[x] = res[z] = k++;
        res[y] = res[c[bb.first]] = k++;
        c[bb.first] = (c[bb.first] + 1) % (2 * n);
        sq[0].push_back(aa);
        sq[0].push_back(bb);
        continue;
      }
      for (int q = 0; q < j; q++) {
        res[c[aa.first]] = res[c[bb.first]] = k++;
        c[aa.first] = (c[aa.first] + 1) % (2 * n);
        c[bb.first] = (c[bb.first] + 1) % (2 * n);
      }
      if (j % 2 == 0) {
        sq[0].push_back(bb);
        sq[i - j].push_back(aa);
      } else {
        int t = c[aa.first];
        c[aa.first] = c[bb.first];
        c[bb.first] = t;
        sq[0].push_back({aa.first, bb.second});
        sq[i - j].push_back({bb.first, aa.second});
      }
    }
  }
  for (int i = 0; i < sq[0].size(); i++) {
    auto a = sq[0][i];
    auto b = sq[0][(i + 1) % (sq[0].size())];
    res[a.second] = res[b.first] = k++;
    while (c[a.first] != a.second) {
      res[c[a.first]] = k;
      c[a.first] = (c[a.first] + 1) % (2 * n);
      res[c[a.first]] = k + 1;
      c[a.first] = (c[a.first] + 1) % (2 * n);
      res[c[a.first]] = k;
      c[a.first] = (c[a.first] + 1) % (2 * n);
      res[c[a.first]] = k + 1;
      c[a.first] = (c[a.first] + 1) % (2 * n);
      k += 2;
    }
  }
  int q = 0;
  for (int i = 0; i < 2 * n; i++) {
    if (res[i] == -1) {
      res[i] = k;
      q++;
      if (q == 2) {
        q = 0;
        k++;
      }
    }
  }
  return 1;
}
int main() {
  std::ios::sync_with_stdio(false);
  n;
  cin >> n;
  cin >> s;
  if (solve()) {
    cout << "Yes\n";
    for (int i = 0; i < 2 * n; i++) {
      cout << (res[i] + 1) << " ";
    }
  } else {
    cout << "No";
  }
  return 0;
}
