#include <bits/stdc++.h>
using namespace std;
long long int cnt, n, lder[3][1000003], sig[1000003], pos;
string s;
long long int getSig(long long int p) {
  if (sig[p] == p) return p;
  sig[p] = getSig(sig[p]);
  return sig[p];
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> s;
  vector<vector<long long int> > lugares(n + 1);
  if (s[n - 1] == '0')
    lder[0][n - 1] = 1;
  else if (s[n - 1] == '1')
    lder[1][n - 1] = 1;
  else
    lder[0][n - 1] = lder[1][n - 1] = 1;
  lder[2][n - 1] = 1;
  sig[n - 1] = n - 1;
  sig[n] = n;
  for (int i = (n - 2); i >= (0); i--) {
    if (s[i] == '0') {
      lder[0][i] = lder[0][i + 1] + 1;
      lder[1][i] = 0;
    } else if (s[i] == '1') {
      lder[0][i] = 0;
      lder[1][i] = lder[1][i + 1] + 1;
    } else {
      lder[0][i] = lder[0][i + 1] + 1;
      lder[1][i] = lder[1][i + 1] + 1;
    }
    lder[2][i] = max(lder[0][i], lder[1][i]);
    sig[i] = i;
  }
  for (int i = (0); i <= (n - 1); i++) lugares[lder[2][i]].push_back(i);
  for (int i = (1); i <= (n); i++) {
    cnt = 0;
    pos = 0;
    while (pos < n) {
      pos = getSig(pos);
      if (pos >= n) break;
      if (lder[2][pos] >= i) {
        ++cnt;
        pos += i;
      } else
        ++pos;
    }
    for (auto l : lugares[i]) ++sig[l];
    cout << cnt << " ";
  }
  return 0;
}
