#include <bits/stdc++.h>

using namespace std;

#define X first
#define Y second
#define mp make_pair
#define pb push_back
#define Debug(...) fprintf(stderr, __VA_ARGS__)

typedef long long LL;
typedef long double LD;
typedef unsigned int uint;
typedef pair <int, int> pii;
typedef unsigned long long uLL;

template <typename T> inline void Read(T &x) {
  char c = getchar();
  bool f = false;
  for (x = 0; !isdigit(c); c = getchar()) {
    if (c == '-') {
      f = true;
    }
  }
  for (; isdigit(c); c = getchar()) {
    x = x * 10 + c - '0';
  }
  if (f) {
    x = -x;
  }
}

template <typename T> inline bool CheckMax(T &a, const T &b) {
  return a < b ? a = b, true : false;
}

template <typename T> inline bool CheckMin(T &a, const T &b) {
  return a > b ? a = b, true : false;
}

const int N = 200005;

vector <int> a, b, c, d;
int n, m, cur, ans[N];
char s[N];

inline int Erase(vector <int> &v, int x) {
  int p = lower_bound(v.begin(), v.end(), x) - v.begin();
  for (int i = p; i < v.size() - 1; ++i) {
    v[i] = v[i + 1];
  }
  v.pop_back();
}

int main() {
#ifdef wxh010910
  freopen("d.in", "r", stdin);
#endif
  Read(n), scanf("%s", s + 1), s[0] = s[n << 1] = '1';
  for (int i = 0; i < n << 1; ++i) {
    if (s[i] == '0' && s[i + 1] == '0') {
      a.pb(i);
    } else if (s[i] == '0' && s[i + 1] == '1') {
      b.pb(i);
    } else if (s[i] == '1' && s[i + 1] == '0') {
      c.pb(i);
    } else {
      d.pb(i);
    }
  }
  m = d.size();
  if (m & 1) {
    puts("No");
  } else {
    if (m & 3) {
      int p, q, r;
      for (p = 0; p <= n << 1 && s[p] == '1'; ++p);
      if (p > n << 1) {
        puts("No");
        return 0;
      }
      while (true) {
        for (; p < n << 1 && s[p + 1] == '0'; ++p);
        if (p >= n << 1) {
          puts("No");
          return 0;
        }
        if (p + 2 <= n << 1 && s[p + 2] == '1') {
          break;
        } else {
          p += 2;
        }
      }
      for (q = p + 1; q <= n << 1 && s[q] == '1'; ++q);
      if (q > n << 1) {
        puts("No");
        return 0;
      }
      for (r = 0; r < m && d[r] > p && d[r] < q - 1; ++r);
      if (r == m) {
        puts("No");
        return 0;
      }
      if (d[r] <= p) {
        for (; r + 1 < m && d[r + 1] < p; ++r);
      }
      int x = p, y = q - 1, z = p + 1, w = d[r];
      ans[x] = ans[y] = ++cur, Erase(b, x), Erase(c, y);
      ans[z] = ans[w] = ++cur, Erase(d, z), Erase(d, w);
    }
    for (int i = 0; i < b.size(); ++i) {
      ans[b[i]] = ans[c[i]] = ++cur;
    }
    for (int i = 0; i < a.size(); i += 2) {
      ans[a[i]] = ans[a[i + 1]] = ++cur;
    }
    for (int i = 0; i < d.size(); i += 4) {
      ans[d[i]] = ans[d[i + 2]] = ++cur;
      ans[d[i + 1]] = ans[d[i + 3]] = ++cur;
    }
    puts("Yes");
    for (int i = 0; i < n << 1; ++i) {
      printf("%d%c", ans[i], i == (n << 1) - 1 ? '\n' : ' ');
    }
  }
#ifdef wxh010910
  Debug("My Time: %.3lfms\n", (double)clock() / CLOCKS_PER_SEC);
#endif
  return 0;
}
