#include <bits/stdc++.h>
using namespace std;
const int INF = 2e15;
const int MB = 20;
const int MOD = 1e9 + 7;
const int maxN = 1e6 + 1;
void solve() {
  int n;
  cin >> n;
  string s;
  cin >> s;
  vector<vector<int>> pref(2, vector<int>(n + 1)), last(2, vector<int>(n + 1));
  for (int i = 1; i <= n; i++) {
    if (s[i - 1] == '0')
      last[0][i] = i;
    else
      last[0][i] = last[0][i - 1];
    if (s[i - 1] == '1')
      last[1][i] = i;
    else
      last[1][i] = last[1][i - 1];
    pref[0][i] = pref[0][i - 1] + (s[i - 1] == '0');
    pref[1][i] = pref[1][i - 1] + (s[i - 1] == '1');
  }
  vector<int> ans(n + 1);
  for (int x = 1; x <= n; x++) {
    for (int i = 0; i + x <= n;) {
      if (pref[0][i + x] - pref[0][i] == 0 ||
          pref[1][i + x] - pref[1][i] == 0) {
        ans[x]++;
        i += x;
        continue;
      }
      if (s[i + x - 1] == '?')
        i = min(last[0][i + x], last[1][i + x]);
      else if (s[i + x - 1] == '1')
        i = last[0][i + x];
      else
        i = last[1][i + x];
    }
  }
  for (int i = 1; i <= n; i++) cout << ans[i] << " ";
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  cout << fixed;
  cout.precision(12);
  int t = 1;
  while (t--) solve();
}
