#include <bits/stdc++.h>
using namespace std;
const int NN = 1e9 + 7;
const int N = 1e6 + 50;
const int M = 26;
const long long mod = 1e9 + 7;
const int inf = 1e9 + 7;
const double long rf = 1e-14;
const int B = sqrt(N);
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int n;
string s;
int a[N];
int b[N];
int c[N];
int d[N];
int lg[N];
int f[N][M];
int get(int l, int r) {
  int x = lg[r - l + 1];
  return max(f[l][x], f[r - (1 << x) + 1][x]);
}
void solve1() {
  cin >> n;
  cin >> s;
  s = '#' + s;
  for (int i = 1; i <= n; i++) {
    a[i] = a[i - 1];
    b[i] = b[i - 1];
    c[i] = c[i - 1];
    if (s[i] == '0')
      a[i] += 1;
    else if (s[i] == '1')
      b[i] += 1;
    else
      c[i] += 1;
  }
  for (int i = 2; i < N; i++) {
    lg[i] = lg[i / 2] + 1;
  }
  for (int i = 1; i <= n; i++) {
    int l = i, r = n;
    while (l < r) {
      int m = (l + r) / 2;
      if (a[m + 1] - a[i - 1] + c[m + 1] - c[i - 1] == m + 1 - (i - 1) ||
          b[m + 1] - b[i - 1] + c[m + 1] - c[i - 1] == m + 1 - (i - 1))
        l = m + 1;
      else
        r = m;
    }
    d[i] = l - i + 1;
    f[i][0] = d[i];
  }
  for (int i = 1; i < M; i++) {
    for (int j = 1; j + (1 << i) - 1 <= n; j++) {
      f[j][i] = max(f[j][i - 1], f[j + (1 << (i - 1))][i - 1]);
    }
  }
  for (int i = 1; i <= n; i++) {
    int st = 1;
    int ans = 0;
    while (n - st + 1 >= i) {
      if (d[st] >= i) {
        st += i;
        ans += 1;
      } else {
        int l = st, r = n;
        while (l < r) {
          int m = (l + r) / 2;
          if (get(st, m) >= i)
            r = m;
          else
            l = m + 1;
        }
        st = l;
      }
    }
    cout << ans << " ";
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int cghf = 1;
  while (cghf--) {
    solve1();
  }
}
