#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
const vector<int> mods = {998244353, 1000000007, 1000000009};
const long long inf = 3e18;
const double pi = acos(-1.0);
const double eps = 0.0000001;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
template <class... K>
using umap = unordered_map<K...>;
template <class... K>
using uset = unordered_set<K...>;
int n, res, cur[3], cw[2][3], fw[2][1000100][3];
string s;
void ps(int ci, int i) {
  if (s[i] == '?')
    cw[ci][2]++;
  else {
    int ty = s[i] - '0';
    if (cw[ci][2] || ty != cw[ci][0]) {
      cw[ci][0] = ty;
      cw[ci][1] = 1 + cw[ci][2];
      cw[ci][2] = 0;
    } else
      cw[ci][1]++;
  }
  fw[ci][i][0] = cw[ci][0];
  fw[ci][i][1] = cw[ci][1];
  fw[ci][i][2] = cw[ci][2];
}
int main() {
  cin.sync_with_stdio(0);
  cin.tie(0);
  cout.precision(13);
  cin >> n >> s;
  char ls = '2';
  int prv = -1;
  for (int i = (0); i < (n); ++i) {
    if (s[i] == '?') continue;
    if (s[i] == ls || ls == '2') {
      for (int j = i - 1; j > prv; j--) s[j] = s[i];
    }
    ls = s[i];
    prv = i;
  }
  for (int j = n - 1; j > prv; j--) s[j] = (ls == '2' ? '0' : ls);
  for (int i = (0); i < (n); ++i) {
    ps(0, n - 1 - i);
    ps(1, i);
  }
  for (int block = (1); block < (n + 1); ++block) {
    res = 0;
    cur[1] = cur[2] = 0;
    for (int i = 0; i < n; i += block) {
      int tk = 0;
      if (cur[0] == fw[0][i][0] && cur[1] + fw[0][i][1] >= block) {
        tk = block - cur[1];
        res++;
      } else if (cur[1] + cur[2] + fw[0][i][2] >= block) {
        tk = block - cur[2] - cur[1];
        res++;
      } else if (cur[2] + fw[0][i][2] + fw[0][i][1] >= block) {
        tk = block - cur[2];
        res++;
      }
      if (i + block - 1 < n) {
        cur[0] = fw[1][i + block - 1][0];
        cur[2] = min(block - tk, fw[1][i + block - 1][2]);
        cur[1] = min(block - tk - cur[2], fw[1][i + block - 1][1]);
        if (cur[1] + cur[2] >= block) {
          res++;
          cur[1] = cur[2] = 0;
        }
      }
    }
    cout << res << " \n"[block == n];
  }
  return 0;
}
