#include <bits/stdc++.h>
using namespace std;
int N;
int S[400010], ans[200010], cnt = 1;
vector<vector<int> > Doors;
vector<int> Cycle;
void prec() {
  Cycle = Doors[0];
  for (int i = 1; i < Doors.size(); i++) {
    ans[Cycle.back()] = cnt;
    ans[Doors[i][0]] = cnt;
    cnt++;
    Cycle.pop_back();
    for (int j = 1; j < Doors[i].size(); j++) {
      Cycle.push_back(Doors[i][j]);
    }
  }
  ans[Cycle[0]] = cnt;
  ans[Cycle.back()] = cnt;
  cnt++;
  Cycle.erase(Cycle.begin());
  Cycle.pop_back();
}
void solve() {
  for (int i = 0; i < (int)Cycle.size() - 3; i += 4) {
    ans[Cycle[i]] = cnt;
    ans[Cycle[i + 2]] = cnt;
    cnt++;
    ans[Cycle[i + 1]] = cnt;
    ans[Cycle[i + 3]] = cnt;
    cnt++;
  }
  int p = 0;
  for (int i = 0; i < 2 * N; i++)
    if (!ans[i]) {
      ans[i] = cnt;
      cnt += p;
      p ^= 1;
    }
  printf("Yes\n");
  for (int i = 0; i < 2 * N; i++) {
    printf("%d ", ans[i]);
  }
}
int main() {
  scanf("%d", &N);
  scanf("\n");
  for (int i = 1; i < 2 * N; i++) {
    char t;
    scanf("%c", &t);
    S[i] = t - '0';
  }
  S[0] = 1;
  for (int i = 0; i < 2 * N; i++) S[2 * N + i] = S[i];
  int p = -1;
  for (int i = 0; i < 2 * N; i++)
    if (!S[i]) {
      p = i;
      break;
    }
  if (p == -1) {
    if (N % 2)
      printf("No");
    else {
      for (int i = 0; i < 2 * N; i++) Cycle.push_back(i);
      solve();
    }
    return 0;
  }
  for (int i = p + 1; i <= 2 * N + p; i++) {
    if (!S[i - 1] && S[i]) {
      Doors.push_back(vector<int>());
      Doors.back().push_back((i + 2 * N - 1) % (2 * N));
    }
    if (S[i]) Doors.back().push_back(i % (2 * N));
  }
  int sum = 0;
  for (int i = 0; i < Doors.size(); i++) {
    sum += (int)Doors[i].size() - 2;
  }
  if (sum % 2 == 0) {
    printf("No");
    return 0;
  }
  if (sum % 4 == 0) {
    prec();
    solve();
    return 0;
  }
  vector<int> tmp;
  for (int i = 0; i < Doors.size(); i++)
    if (Doors[i].size() > 2) {
      tmp.push_back(i);
    }
  if (tmp.size() < 2) {
    printf("No");
    return 0;
  }
  ans[Doors[tmp[0]][(int)Doors[tmp[0]].size() - 2]] = cnt;
  ans[Doors[tmp[1]][(int)Doors[tmp[1]].size() - 2]] = cnt;
  cnt++;
  Doors[tmp[0]].erase(Doors[tmp[0]].end() - 2);
  Doors[tmp[1]].erase(Doors[tmp[1]].end() - 2);
  swap(Doors[tmp[0]].back(), Doors[tmp[1]].back());
  prec();
  solve();
}
