#include <bits/stdc++.h>
using ll = long long;
using P = std::pair<ll, ll>;
constexpr ll INF = 1ll << 60;
template <class T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class S, class T>
std::ostream& operator<<(std::ostream& out, const std::pair<S, T>& a) {
  std::cout << '(' << a.first << ", " << a.second << ')';
  return out;
}
template <class T>
std::ostream& operator<<(std::ostream& out, const std::vector<T>& a) {
  std::cout << '[';
  for (ll i = (0); i < (a.size()); ++i) {
    std::cout << a[i];
    if (i != a.size() - 1) std::cout << ", ";
  }
  std::cout << ']';
  return out;
}
ll n;
std::string s;
ll nxt[2][1000010];
std::vector<ll> p[2][1000010];
int main() {
  std::cin >> n >> s;
  for (ll i = (n)-1; i >= (0); --i) {
    if (s[i] != '0') nxt[0][i] = nxt[0][i + 1] + 1;
    if (s[i] != '1') nxt[1][i] = nxt[1][i + 1] + 1;
  }
  for (ll b = (0); b < (2); ++b) {
    ll l = 0;
    while (l < n) {
      while (s[l] == char('0' + b)) {
        ++l;
        continue;
      }
      ll r = l + 1;
      while (r < n && s[r] != char('0' + b)) ++r;
      for (ll len = (1); len < (r - l + 1); ++len) {
        p[b][len].emplace_back(l);
      }
      l = r;
    }
  }
  for (ll len = (1); len < (n + 1); ++len) {
    ll pos = 0;
    ll ptr[2] = {0, 0};
    ll ans = 0;
    while (pos < n) {
      ll npos = INF;
      for (ll b = (0); b < (2); ++b) {
        if (nxt[b][pos] >= len) chmin(npos, pos + len);
        while (ptr[b] < p[b][len].size() && p[b][len][ptr[b]] < pos) ++ptr[b];
        if (ptr[b] < p[b][len].size()) chmin(npos, p[b][len][ptr[b]] + len);
      }
      if (npos != INF) ++ans;
      pos = npos;
    }
    std::cout << ans << ' ';
  }
  std::cout << '\n';
  return 0;
}
