#include <bits/stdc++.h>
using namespace std;
const int N = 1000006;
vector<int> p(N);
vector<vector<int>> lst(2, vector<int>(N));
vector<int> E[N];
int n;
int get(int x) {
  int R = x;
  while (x != p[x]) {
    x = p[x];
  }
  while (R != p[R]) {
    int aux = p[R];
    p[R] = x;
    R = aux;
  }
  return x;
}
void unite(int x, int y) {
  x = get(x);
  y = get(y);
  if (x > y) swap(x, y);
  p[x] = y;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  char c[n + 1];
  for (int i = 1; i <= n; i++) {
    cin >> c[i];
    p[i] = i;
  }
  lst[0][n + 1] = lst[1][n + 1] = n + 1;
  for (int i = n; i >= 1; i--) {
    lst[0][i] = lst[0][i + 1];
    lst[1][i] = lst[1][i + 1];
    if (c[i] == '?') continue;
    lst[c[i] - '0'][i] = i;
  }
  p[n + 1] = n + 1;
  for (int i = 1; i <= n; i++) {
    int to = max(lst[0][i], lst[1][i]);
    E[to - i].push_back(i);
  }
  for (int i = 1; i <= n; i++) {
    int ans = 0;
    int now = get(1);
    while (now != n + 1) {
      ans += 1;
      now = get(now + i);
    }
    cout << ans << ' ';
    for (auto it : E[i]) {
      unite(it, it + 1);
    }
  }
  return 0;
}
