#include <bits/stdc++.h>
using namespace std;
int dx[] = {+1, -1, 0, 0};
int dy[] = {0, 0, +1, -1};
int lef[2][4000005];
int ri[2][4000005];
string s;
int n;
int ans[4000005];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> n;
  cin >> s;
  int bef[2];
  bef[0] = bef[1] = 0;
  for (int i = 0; i < n; i++) {
    if (s[i] == '?')
      bef[0]++, bef[1]++;
    else if (s[i] == '1')
      bef[1]++, bef[0] = 0;
    else
      bef[0]++, bef[1] = 0;
    lef[0][i] = bef[0];
    lef[1][i] = bef[1];
  }
  bef[0] = bef[1] = 0;
  for (int i = n - 1; i >= 0; i--) {
    if (s[i] == '?')
      bef[0]++, bef[1]++;
    else if (s[i] == '1')
      bef[1]++, bef[0] = 0;
    else
      bef[0]++, bef[1] = 0;
    ri[0][i] = bef[0];
    ri[1][i] = bef[1];
  }
  ans[1] = n;
  for (int i = 1; i <= n; i++) {
    bool flag = true;
    int res = 0;
    for (int j = i; flag; j += i) {
      if (j >= n) flag = false;
      int cnt0 = min(lef[0][j - 1], i) + ri[0][j];
      int cnt1 = min(lef[1][j - 1], i) + ri[1][j];
      int cur = j;
      if (cnt0 >= i && cnt1 >= i) {
        if (lef[0][j - 1] > lef[1][j - 1])
          cur = j - min(i, lef[0][j - 1]) + 1;
        else
          cur = j - min(i, lef[1][j - 1]) + 1;
        ++res;
        j = cur + i - 1;
      } else if (cnt0 >= i) {
        cur = j - min(i, lef[0][j - 1]) + 1, ++res;
        j = cur + i - 1;
      } else if (cnt1 >= i) {
        cur = j - min(i, lef[1][j - 1]) + 1, ++res;
        j = cur + i - 1;
      }
    }
    ans[i] = res;
  }
  for (int i = 1; i <= n; i++) cout << ans[i] << " ";
  return 0;
}
