#include <bits/stdc++.h>
using namespace std;
int n;
string s;
vector<int> g[2100000];
int nxt[2100000];
int dp[2];
set<int> st;
int main() {
  cin >> n >> s;
  for (int i = n - 1; i >= 0; i--) {
    dp[0]++;
    dp[1]++;
    if (s[i] == '1') dp[0] = 0;
    if (s[i] == '0') dp[1] = 0;
    if (s[i] != '?')
      nxt[i] = dp[s[i] - '0'];
    else
      nxt[i] = max(dp[0], dp[1]);
    g[nxt[i]].push_back(i);
    st.insert(i);
  }
  st.insert(0x3f3f3f3f);
  for (int i = 1; i <= n; i++) {
    int pos = 0;
    int ans = 0;
    while (1) {
      pos = *st.lower_bound(pos);
      if (pos >= n) break;
      ans += nxt[pos] / i;
      pos = pos + nxt[pos] / i * i;
    }
    printf("%d ", ans);
    for (auto p : g[i]) st.erase(p);
  }
  return ~~(0 ^ 0 ^ 0);
}
