#include <bits/stdc++.h>
using namespace std;
const int M = 200100;
string s;
int n;
int m;
int q[M];
vector<int> bb;
vector<int> bw;
vector<int> wb;
vector<int> ww;
bool used[M];
int ans[M];
void read() {
  cin >> n;
  cin >> s;
  s = "1" + s;
  m = 2 * n;
}
void kill() {
  int chunk_no = 0;
  vector<int> st[2];
  for (int i = 0; i < m; ++i) {
    bool A = s[i] == '1';
    bool B = s[(i + 1) % m] == '1';
    bool C = s[(i + 2) % m] == '1';
    if (A && B) {
      bb.push_back(i);
    }
    if (A && !B) {
      bw.push_back(i);
    }
    if (!A && B) {
      wb.push_back(i);
    }
    if (!A && !B) {
      ww.push_back(i);
    }
    if (A && B && !C) {
      ++chunk_no;
      st[bb.size() % 2].push_back(bw.size());
    }
  }
  assert(wb.size() == bw.size());
  if (bb.size() % 2 == 1) {
    cout << "No\n";
    return;
  }
  assert(ww.size() % 2 == 0);
  int k = bb.size();
  int t = wb.size();
  cerr << "k = " << k << endl;
  cerr << "t = " << t << endl;
  if (chunk_no <= 1) {
    if (k % 4 == 2) {
      cout << "No\n";
      return;
    }
  } else {
    if (!st[0].empty() && !st[1].empty()) {
      swap(bw[st[0].front() % t], bw[st[1].front() % t]);
    } else {
      cout << "No\n";
      return;
    }
  }
  for (int i = 0; i < (int)bb.size(); ++i) {
    q[bb[i]] = bb[(i + bb.size() / 2) % bb.size()];
  }
  for (int i = 0; i < (int)wb.size(); ++i) {
    q[wb[i]] = bw[i];
    q[bw[i]] = wb[i];
  }
  for (int i = 0; i < (int)ww.size(); ++i) {
    q[ww[i]] = ww[(i + ww.size() / 2) % ww.size()];
  }
  int cnt = 0;
  for (int i = 0; i < m; ++i)
    if (!used[i]) {
      used[i] = used[q[i]] = true;
      ++cnt;
      ans[i] = ans[q[i]] = cnt;
    }
  cout << "Yes\n";
  for (int i = 0; i < m; ++i) {
    cout << ans[i] << " ";
  }
  cout << endl;
}
int main() {
  ios_base::sync_with_stdio(false);
  read();
  kill();
}
