#include <bits/stdc++.h>
using namespace std;
template <typename T>
bool setmin(T& a, T b) {
  if (b < a) {
    a = b;
    return true;
  } else {
    return false;
  }
}
template <typename T>
bool setmax(T& a, T b) {
  if (b > a) {
    a = b;
    return true;
  } else {
    return false;
  }
}
template <typename T>
bool setmineq(T& a, T b) {
  if (b <= a) {
    a = b;
    return true;
  } else {
    return false;
  }
}
template <typename T>
bool setmaxeq(T& a, T b) {
  if (b >= a) {
    a = b;
    return true;
  } else {
    return false;
  }
}
template <typename T>
T gcd(T a, T b) {
  return (b == 0 ? a : gcd(b, a % b));
}
template <typename T>
T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
int n, a, b, ans[400000];
string s;
void no() {
  cout << "No" << endl;
  exit(0);
}
int cnt;
void paint2(int x, int y) {
  cnt += 2;
  x %= 2 * n;
  y %= 2 * n;
  assert((ans[x] == 0) == (ans[y] == 0));
  if (ans[x] != 0) {
    return;
  }
  ans[x] = cnt / 2;
  ans[y] = cnt / 2;
}
void paint1(int x) {
  cnt += 1;
  x %= 2 * n;
  if (ans[x] != 0) {
    return;
  }
  ans[x] = cnt / 2;
}
int main() {
  cin >> n >> s;
  assert(s.size() == 2 * n - 1);
  s = "1" + s + "1" + s;
  for (int i = (0); i < (2 * n); i++) {
    if (s.substr(i, 2) == "11") {
      a++;
    }
    if (s.substr(i, 2) == "10") {
      b++;
    }
  }
  if (a % 2 != 0) {
    no();
  }
  if (a % 4 != 0 && b < 2) {
    no();
  }
  int p = 0;
  if (a % 4 != 0) {
    for (int i = (0); i < (2 * n); i++) {
      if (s.substr(i, 2) == "10") {
        p = i;
        break;
      }
    }
  }
  vector<pair<int, int>> v[2];
  int x = -1;
  for (int i = (p); i < (p + 2 * n); i++) {
    if (s.substr(i, 2) == "10") {
      x = i;
    }
    if (s.substr(i, 2) == "01") {
      v[s.substr(i + 1, 2) == "11" ? 1 : 0].emplace_back(x, i);
    }
  }
  if (a % 4 != 0) {
    if (v[1].size() < 2) {
      no();
    }
    paint2(v[1][0].first, v[1][1].second);
    paint2(v[1][0].second, v[1][1].first);
    paint2(v[1][0].second + 1, v[1][1].second + 1);
    reverse(v[1].begin(), v[1].end());
    v[1].pop_back();
    v[1].pop_back();
  }
  for (int k = (0); k < (2); k++) {
    for (int i = (0); i < (v[k].size()); i++) {
      paint2(v[k][i].first, v[k][i].second);
    }
  }
  for (int i = (p); i < (p + 2 * n); i++) {
    if (s.substr(i, 2) == "11") {
      paint1(i);
    }
  }
  for (int i = (p); i < (p + 2 * n); i++) {
    if (s.substr(i, 2) == "00") {
      paint1(i);
    }
  }
  cout << "Yes" << endl;
  for (int i = (0); i < (2 * n); i++) {
    cout << (i == 0 ? "" : " ") << ans[i];
  }
  cout << endl;
  return 0;
}
