#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 1e9 + 7;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ll n;
  cin >> n;
  string s;
  cin >> s;
  n = s.length();
  vector<vector<ll>> startsAt1(n + 5);
  vector<vector<ll>> startsAt0(n + 5);
  vector<ll> farthest_as_1(n, 0), farthest_as_0(n, 0);
  ll prev_1_count = 0, prev_0_count = 0;
  for (int i = n - 1; i >= 0; --i) {
    if (s[i] == '0') {
      while (prev_1_count > 0) {
        startsAt1[prev_1_count].push_back(i + 1);
        prev_1_count--;
      }
      prev_0_count++;
      prev_1_count = 0;
    } else if (s[i] == '1') {
      while (prev_0_count > 0) {
        startsAt0[prev_0_count].push_back(i + 1);
        prev_0_count--;
      }
      prev_1_count++;
      prev_0_count = 0;
    } else {
      prev_0_count++;
      prev_1_count++;
    }
    farthest_as_0[i] = i + prev_0_count - 1;
    farthest_as_1[i] = i + prev_1_count - 1;
  }
  while (prev_1_count > 0) {
    startsAt1[prev_1_count].push_back(0);
    prev_1_count--;
  }
  while (prev_0_count > 0) {
    startsAt0[prev_0_count].push_back(0);
    prev_0_count--;
  }
  for (int i = 0; i < n + 5; ++i) {
    reverse(startsAt1[i].begin(), startsAt1[i].end());
    reverse(startsAt0[i].begin(), startsAt0[i].end());
  }
  for (int len = 1; len <= n; ++len) {
    ll count = 0;
    ll pos = 0;
    ll cur_in_starts_0 = 0, cur_in_starts_1 = 0;
    while (pos + len <= n) {
      if (max(farthest_as_0[pos], farthest_as_1[pos]) >= pos + len - 1) {
        count++;
        pos = pos + len;
      } else {
        while (cur_in_starts_1 < startsAt1[len].size() &&
               startsAt1[len][cur_in_starts_1] <= pos)
          cur_in_starts_1++;
        while (cur_in_starts_0 < startsAt0[len].size() &&
               startsAt0[len][cur_in_starts_0] <= pos)
          cur_in_starts_0++;
        if (cur_in_starts_1 >= startsAt1[len].size() &&
            cur_in_starts_0 >= startsAt0[len].size())
          break;
        else if (cur_in_starts_1 >= startsAt1[len].size()) {
          count++;
          pos = startsAt0[len][cur_in_starts_0] + len;
        } else if (cur_in_starts_0 >= startsAt0[len].size()) {
          count++;
          pos = startsAt1[len][cur_in_starts_1] + len;
        } else {
          count++;
          pos = min(startsAt1[len][cur_in_starts_1],
                    startsAt0[len][cur_in_starts_0]) +
                len;
        }
      }
    }
    cout << count << " ";
  }
  cout << '\n';
  return 0;
}
