#include <bits/stdc++.h>
using namespace std;
long long power_mod(long long num, long long g) {
  if (g == 0) return 1;
  if (g % 2 == 1)
    return (num * power_mod((num * num) % 1000000007, g / 2)) % 1000000007;
  return power_mod((num * num) % 1000000007, g / 2);
}
long long power(long long num, long long g) {
  if (g == 0) return 1;
  if (g % 2 == 1) return (num * power((num * num), g / 2));
  return power((num * num), g / 2);
}
long long a[201], b[201], c[201];
long long d[201][201][201];
long long solve(long long x, long long y, long long z) {
  long long e = 0;
  if (d[x][y][z] > -1) return d[x][y][z];
  long long ans = 0;
  if (x > 0 && y > 0) {
    ans = max(ans, solve(x - 1, y - 1, z) + a[x - 1] * b[y - 1]);
  }
  if (x > 0 && z > 0) {
    ans = max(ans, solve(x - 1, y, z - 1) + a[x - 1] * c[z - 1]);
  }
  if (z > 0 && y > 0) {
    ans = max(ans, solve(x, y - 1, z - 1) + b[y - 1] * c[z - 1]);
  }
  return d[x][y][z] = ans;
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long n;
  cin >> n;
  string s;
  cin >> s;
  vector<pair<long long, long long> > vec, vec1;
  for (long long i = 0; i < n; i++) {
    long long x = 1;
    while (i + 1 < n && s[i] == s[i + 1]) x++, i++;
    if (s[i] == '?')
      vec.push_back(make_pair(x, 2));
    else
      vec.push_back(make_pair(x, s[i] - '0'));
  }
  long long l = vec.size();
  long long x = 0;
  for (long long i = 0; i < l; i++) {
    if (i == 0)
      vec1.push_back(vec[0]);
    else if (i == 1 && vec1[0].second == 2) {
      vec1[0].first += vec[i].first;
      vec1[0].second = vec[i].second;
    } else if (vec[i].second < 2)
      vec1.push_back(vec[i]), x++;
    else {
      if (i + 1 < l && vec[i + 1].second == vec1[x].second) {
        vec1[x].first += vec[i].first + vec[i + 1].first;
        i++;
      } else
        vec1.push_back(vec[i]), x++;
    }
  }
  l = vec1.size();
  if (l > 1 && vec1[l - 1].second == 2) {
    vec1[l - 2].first += vec1[l - 1].first;
    vec1.pop_back();
  }
  vec = vec1;
  l = vec1.size();
  if (l == 1) {
    for (long long i = 1; i <= n; i++) {
      cout << n / i << " ";
    }
    cout << endl;
    return 0;
  }
  cout << n;
  for (long long i = 2; i <= n; i++) {
    vec1.clear();
    long long ans = 0;
    l = vec.size();
    long long prev = 0;
    for (long long j = 0; j < l; j++) {
      long long er = vec[j].first;
      if (j > 0 && vec[j - 1].second == 2) er += vec[j - 1].first;
      if (j + 1 < l && vec[j + 1].second == 2) er += vec[j + 1].first;
      if (er >= i) {
        vec1.push_back(vec[j]);
        if (j + 1 < l && vec[j + 1].second == 2) vec1.push_back(vec[j + 1]);
      } else {
        long long rt = vec1.size();
        if (rt > 0 && vec1[rt - 1].second == 2) {
          vec1[rt - 2].first += vec1[rt - 1].first;
          vec1.pop_back();
        }
        if (j + 1 < l && vec[j + 1].second == 2) {
          vec[j + 2].first += vec[j + 1].first;
          vec[j + 1].first = 0;
        }
      }
      if (j + 1 < l && vec[j + 1].second == 2) {
        prev += vec[j + 1].first + vec[j].first;
        ans += prev / i;
        prev = min(prev % i, vec[j + 1].first);
        j++;
      } else {
        prev += vec[j].first;
        ans += prev / i;
        prev = 0;
      }
    }
    cout << " " << ans;
    vec = vec1;
  }
  return 0;
}
