#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;
string s;
int ans[400000];
void no() {
  cout << "No" << endl;
  exit(0);
}
int main() {
  cin >> n >> s;
  assert(s.size() == 2 * n - 1);
  s = "1" + s + "1" + s;
  for (int i = (0); i < (4 * n); i++) {
    ans[i] = -1;
  }
  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();
  }
  int p = 0;
  if (a % 4 == 0) {
    int c = 0;
    for (int i = (0); i < (2 * n); i++) {
      if (s.substr(i, 2) == "11") {
        ans[i] = (c / 4 * 2) + (c % 2);
        c++;
      }
    }
    for (int i = (0); i < (2 * n); i++) {
      if (s.substr(i, 2) == "10") {
        ans[i] = c / 2;
        c++;
      }
      if (s.substr(i, 2) == "01") {
        ans[i] = c / 2;
        c++;
      }
    }
    for (int i = (0); i < (2 * n); i++) {
      if (ans[i] == -1) {
        ans[i] = c / 2;
        c++;
      }
    }
    assert(c == 2 * n);
  } else {
    if (b < 2) {
      no();
    }
    for (int i = (0); i < (2 * n); i++) {
      p = i;
      if (s.substr(i, 2) == "10") {
        break;
      }
    }
    int t = -1, z = 0, w = 0;
    vector<array<int, 3>> v[4];
    for (int i = (p); i < (p + 2 * n + 1); i++) {
      if (s[i] == '0') {
        z++;
      }
      if (s.substr(i, 2) == "11") {
        w++;
      }
      if (s.substr(i, 2) == "10") {
        if (t >= 0) {
          v[w % 4].push_back({t, z, w});
        }
        t = i;
        z = 0;
        w = 0;
      }
    }
    for (int i = (1); i <= (3); i++) {
      if (v[i].size() % 2 != 0) {
        no();
      }
    }
    int c = 0;
    for (int k = (1); k <= (3); k++) {
      for (int i = (0); i < (v[k].size()); i++) {
        int at = v[k][i + 0][0];
        int az = v[k][i + 0][1];
        int aw = v[k][i + 0][2];
        int bt = v[k][i + 1][0];
        int bz = v[k][i + 1][1];
        int bw = v[k][i + 1][2];
        ans[at] = c / 2;
        c++;
        ans[bt + bz] = c / 2;
        c++;
        ans[at + az] = c / 2;
        c++;
        ans[bt] = c / 2;
        c++;
        for (int j = (0); j < (k); j++) {
          ans[at + az + 1 + j] = c / 2;
          c++;
          ans[bt + bz + 1 + j] = c / 2;
          c++;
        }
        for (int j = (k); j < (aw); j++) {
          ans[at + az + 1 + j + 0] = c / 2;
          c++;
          ans[at + az + 1 + j + 2] = c / 2;
          c++;
          ans[at + az + 1 + j + 1] = c / 2;
          c++;
          ans[at + az + 1 + j + 3] = c / 2;
          c++;
          j += 4 - 1;
        }
        for (int j = (k); j < (bw); j++) {
          ans[bt + bz + 1 + j + 0] = c / 2;
          c++;
          ans[bt + bz + 1 + j + 2] = c / 2;
          c++;
          ans[bt + bz + 1 + j + 1] = c / 2;
          c++;
          ans[bt + bz + 1 + j + 3] = c / 2;
          c++;
          j += 4 - 1;
        }
        i += 2 - 1;
      }
    }
    {
      int k = 0;
      for (int i = (0); i < (v[k].size()); i++) {
        int at = v[k][i + 0][0];
        int az = v[k][i + 0][1];
        int aw = v[k][i + 0][2];
        ans[at] = c / 2;
        c++;
        ans[at + az] = c / 2;
        c++;
        for (int j = (k); j < (aw); j++) {
          ans[at + az + 1 + j + 0] = c / 2;
          c++;
          ans[at + az + 1 + j + 2] = c / 2;
          c++;
          ans[at + az + 1 + j + 1] = c / 2;
          c++;
          ans[at + az + 1 + j + 3] = c / 2;
          c++;
          j += 4 - 1;
        }
      }
    }
    for (int i = (p); i < (p + 2 * n); i++) {
      if (ans[i] == -1) {
        ans[i] = c / 2;
        c++;
      }
    }
    assert(c == 2 * n);
  }
  for (int i = (0); i < (p); i++) {
    ans[i] = ans[i + 2 * n];
  }
  cout << "Yes" << endl;
  for (int i = (0); i < (2 * n); i++) {
    cout << (i == 0 ? "" : " ") << ans[i] + 1;
  }
  cout << endl;
  return 0;
}
