#include <bits/stdc++.h>
using namespace std;
class Solution {
 public:
  vector<int> solve(string& s) {
    int n = s.length();
    vector<int> nexts(n + 1, 0);
    iota(nexts.begin(), nexts.end(), 0);
    function<int(int)> find = [&](int x) {
      return nexts[x] == x ? x : nexts[x] = find(nexts[x]);
    };
    vector<int> lens(n, 0);
    vector<int> pos(2, n);
    vector<pair<int, int>> P;
    for (int i = n - 1; i >= 0; --i) {
      if (s[i] != '?') {
        pos[s[i] - '0'] = i;
      }
      int j = max(pos[0], pos[1]);
      lens[i] = j - i;
      P.emplace_back(lens[i], i);
    }
    sort(P.begin(), P.end());
    vector<int> res(n, 0);
    for (int i = 1, j = 0; i <= n; ++i) {
      while (j < n && P[j].first < i) {
        int x = P[j].second;
        nexts[x] = x + 1;
        ++j;
      }
      int x = 0;
      int ans = 0;
      while (x < n) {
        x = find(x);
        if (x >= n) {
          break;
        }
        ++ans;
        x += i;
      }
      res[i - 1] = ans;
    }
    return res;
  }
};
int main(int argc, char** argv) {
  ios::sync_with_stdio(false);
  cin.tie(0);
  Solution sol;
  int n;
  cin >> n;
  string s;
  cin >> s;
  auto res = sol.solve(s);
  for (int i = 0; i < n; ++i) {
    cout << res[i] << (i + 1 == n ? '\n' : ' ');
  }
  return 0;
}
