#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int MAXN = 1000005;
const int MOD = 1000000007;
const double eps = 1e-8;
const double PI = acos(-1.0);
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long qpow(long long a, long long n, long long p = MOD) {
  long long r = 1 % p;
  for (a %= p; n; a = a * a % p, n >>= 1)
    if (n & 1) r = r * a % p;
  return r;
}
long long inv(long long x, long long p = MOD) {
  return x <= 1 ? 1 : inv(p % x, p) * (p - p / x) % p;
}
int n, pre[MAXN], lst[2];
char s[MAXN];
void solve() {
  scanf("%d%s", &n, s + 1);
  for (int i = 1; i <= n; i++) {
    if (s[i] == '?')
      pre[i] = pre[i - 1] + 1;
    else {
      pre[i] = i - lst[(s[i] - '0') ^ 1];
      lst[s[i] - '0'] = i;
    }
  }
  for (int x = 1; x <= n; x++) {
    int p = 1, ans = 0;
    while (p + x - 1 <= n) {
      if (pre[p + x - 1] >= x) {
        ans++;
        p += x;
      } else {
        p += x - pre[p + x - 1];
      }
    }
    printf("%d%c", ans, x == n ? '\n' : ' ');
  }
}
int main(int argc, char* argv[]) {
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
