#include <bits/stdc++.h>
int n;
const int N = 1e6 + 1;
char s[N];
int fa[N], a[N][2];
std::vector<int> v[N];
int find(int x) {
  while (fa[x] && fa[fa[x]]) x = fa[x] = fa[fa[x]];
  return fa[x] ? fa[x] : x;
}
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(NULL);
  std::cin >> n;
  std::cin >> s + 1;
  int lst0 = 0, lst1 = 0;
  for (int i = 1; i <= n; i++) {
    int l = 0;
    if (s[i] == '?') l = i - std::min(lst0, lst1);
    if (s[i] == '0') l = i - lst1, lst0 = i;
    if (s[i] == '1') l = i - lst0, lst1 = i;
    v[l].push_back(i);
  }
  for (int i = 1; i <= n; i++) {
    int lsp = 0, answer = 0, k = 0;
    while (true) {
      if (lsp + i > n) break;
      if ((k = find(lsp + i)) == n + 1) break;
      ++answer;
      lsp = k;
    }
    std::cout << answer << ' ';
    for (auto j : v[i]) fa[j] = j + 1;
  }
  return 0;
}
