#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0, f = 1;
  char c = getchar();
  while (c != '-' && (c < '0' || c > '9')) c = getchar();
  if (c == '-') f = -1, c = getchar();
  while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  return f * x;
}
const long long N = 2e6 + 7;
const long long M = 1e9 + 7;
const long long MAXN = 2e18 + 7;
const long long Mod = 998244353;
long long _, i, j, k, n, m, p, q, s, T, t, l, r, o, u, v, w, x, y, z, ans,
    nex[N], num, st, en, sx, sy, tx, ty, len, th, ma, mi, mod, sum, res, flag,
    cas, ret, mid, cnt, now, tmp;
long long a[N], b[N], c[N], d[N], e[N];
char ch;
vector<pair<long long, long long> > g[N], h;
string s1, s2, s3;
signed main() {
  ios::sync_with_stdio(false);
  long long T = 1;
  while (T--) {
    cin >> n;
    cin >> s1;
    s1 = " " + s1;
    for (i = 1; i <= n; i++) {
      if (s1[i] == '?') continue;
      a[i] = s1[i] - 47;
      break;
    }
    x = -1;
    for (; i <= n; i++) {
      if (s1[i] == '?') continue;
      a[i] = s1[i] - 47;
      if (a[i] != x) e[i] = 1, x = a[i];
    }
    for (i = 1; i <= n; i++) {
      if (s1[i] == '?')
        a[i] = 2;
      else
        a[i] = s1[i] - '0';
    }
    for (i = 1; i <= n; i++) {
      c[i] = c[i - 1], d[i] = d[i - 1];
      if (a[i] == 0)
        c[i]++;
      else if (a[i] == 1)
        d[i]++;
    }
    for (i = n; i >= 1; i--)
      if (a[i] < 2) break;
    b[i] = 1;
    x = a[i];
    for (; i >= 1; i--) {
      if (a[i] < 2 && a[i] != x) b[i] = 1, x = a[i];
    }
    for (i = 1; i <= n; i++) {
      if (e[i]) x = i;
      if (b[i]) h.push_back(pair<long long, long long>(x, i));
    }
    h.push_back(pair<long long, long long>(n + 1, n + 1));
    for (i = 1; i < h.size() - 1; i++) {
      for (j = h[i].first; j < h[i + 1].first; j++) {
        nex[j] = h[i - 1].second;
      }
    }
    for (i = 1; i <= n; i++) {
      ans = p = 0;
      while (1) {
        q = p + i;
        if (q > n) break;
        if (c[p] == c[q] || d[p] == d[q])
          ans++, p = q;
        else
          p = nex[q];
      }
      printf("%lld ", ans);
    }
  }
  return 0;
}
