#include <bits/stdc++.h>
using namespace std;
int isEdge[222222];
int cou[3];
int ans[222222];
int main() {
  int n;
  cin >> n;
  string str;
  cin >> str;
  str = '1' + str + '1';
  for (long long(i) = (0); (i) < (2 * n); ++i) {
    int tmp = 0;
    isEdge[i] = ((str[i] == '1') + (str[i + 1] == '1'));
    cou[isEdge[i]]++;
  }
  if (cou[2] % 2) {
    cout << "No" << endl;
    return 0;
  }
  int nowNum = 1;
  if (cou[2] % 4 == 2) {
    vector<vector<int>> paths;
    vector<int> path;
    int pla = 0;
    for (long long(i) = (0); (i) < (n); ++i) {
      if (isEdge[i] == 1) {
        pla = i + 1;
        break;
      }
    }
    for (int i = 0; i < 2 * n; i++) {
      int place = (i + n * 2 - 1 + pla) % (2 * n);
      if (isEdge[place] == 0) {
      } else if (isEdge[place] == 2) {
        path.push_back(place);
        if (path.size() > 1) {
          if (path.size() > 2) {
            paths.push_back(path);
          }
          path.clear();
        }
      } else {
        path.push_back(place);
      }
    }
    if (paths.size() <= 1) {
      cout << "No" << endl;
      return 0;
    }
    ans[paths[0][1]] = 1;
    ans[paths[1][1]] = 1;
    ans[paths[1][0]] = 2;
    ans[paths[1][paths[1].size() - 1]] = 2;
    nowNum += 2;
    isEdge[paths[0][1]] = -1;
    isEdge[paths[1][1]] = -1;
    isEdge[paths[1][0]] = -1;
    isEdge[paths[1][paths[1].size() - 1]] = -1;
  }
  vector<int> seica;
  for (long long(i) = (0); (i) < (2 * n); ++i) {
    if (isEdge[i] == 1) seica.push_back(i);
    if (seica.size() == 2) {
      ans[seica[0]] = nowNum;
      ans[seica[1]] = nowNum;
      nowNum++;
      seica.clear();
    }
  }
  for (long long(i) = (0); (i) < (2 * n); ++i) {
    if (isEdge[i] == 2) seica.push_back(i);
    if (seica.size() == 4) {
      ans[seica[0]] = nowNum;
      ans[seica[1]] = nowNum + 1;
      ans[seica[2]] = nowNum;
      ans[seica[3]] = nowNum + 1;
      nowNum += 2;
      seica.clear();
    }
  }
  for (long long(i) = (0); (i) < (2 * n); ++i) {
    if (isEdge[i] == 0) seica.push_back(i);
    if (seica.size() == 2) {
      ans[seica[0]] = nowNum;
      ans[seica[1]] = nowNum;
      nowNum++;
      seica.clear();
    }
  }
  cout << "Yes" << endl;
  for (long long(i) = (0); (i) < (2 * n); ++i) cout << ans[i] << ' ';
  cout << endl;
  return 0;
}
