#include <bits/stdc++.h>
using namespace std;
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() {
  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.push_back(i);
    } else if (s[i] == '0' && s[i + 1] == '1') {
      b.push_back(i);
    } else if (s[i] == '1' && s[i + 1] == '0') {
      c.push_back(i);
    } else {
      d.push_back(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;
    }
    for (int i = 0; i < n << 1; ++i) {
      printf("%d%c", ans[i], i == (n << 1) - 1 ? '\n' : ' ');
    }
  }
  return 0;
}
