#include <bits/stdc++.h>
using namespace std;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count() +
            'd' + 'o' + 'i' + 'n' + 'g' + 'g' + 'e' + 'y');
const long long inf = 1e18;
const long double eps = 1e-6;
long double start_time;
const long long maxn = 1e6 + 1;
long long pr[maxn][2], nx[maxn][2];
signed main() {
  start_time = clock();
  ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
  long long n;
  cin >> n;
  string s;
  cin >> s;
  long long pos0 = n, pos1 = n;
  for (long long i = n - 1; i >= 0; --i) {
    if (s[i] == '0')
      pos0 = i;
    else if (s[i] == '1')
      pos1 = i;
    nx[i][0] = pos0, nx[i][1] = pos1;
  }
  pos0 = -1, pos1 = -1;
  for (long long i = 0; i < n; ++i) {
    if (s[i] == '0')
      pos0 = i;
    else if (s[i] == '1')
      pos1 = i;
    pr[i][0] = pos0, pr[i][1] = pos1;
  }
  long long st = -1;
  for (long long i = 0; i < n; ++i) {
    if (s[i] != '?') {
      st = i;
      break;
    }
  }
  for (long long x = 1; x <= n; ++x) {
    if (st == -1) {
      cout << n / x << " ";
      continue;
    }
    long long i = st, ans = 0, br = -1;
    while (i < n) {
      if (s[i] == '?') {
        i = max(pr[i][0], pr[i][1]);
        continue;
      }
      long long pos = nx[i][('1' - s[i])];
      long long add = i - 1 - max(br, pr[i][('1' - s[i])]);
      long long d = pos - i + add;
      ans += d / x;
      if (d >= x) br = i - add + (d / x) * x - 1;
      i = max(pos, i + x - 1);
    }
    cout << ans << " ";
  }
  return 0;
}
