#include <bits/stdc++.h>
using namespace std;
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  os << '{';
  string sep;
  for (const auto &x : v) os << sep << x, sep = ", ";
  return os << '}';
}
template <typename T, size_t size>
ostream &operator<<(ostream &os, const array<T, size> &arr) {
  os << '{';
  string sep;
  for (const auto &x : arr) os << sep << x, sep = ", ";
  return os << '}';
}
template <typename A, typename B>
ostream &operator<<(ostream &os, const pair<A, B> &p) {
  return os << '(' << p.first << ", " << p.second << ')';
}
void dbg_out() { cout << '\n'; }
template <typename Head, typename... Tail>
void dbg_out(Head H, Tail... T) {
  cout << ' ' << H;
  dbg_out(T...);
}
const int N = 1e6 + 5, mod = 1e9 + 7, bit = 61;
vector<int> adj[2][N];
int len[2][N];
signed main() {
  ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  int t = 1;
  for (int tc = 1; tc <= t; tc++) {
    int n;
    cin >> n;
    string s;
    cin >> s;
    s = '?' + s;
    for (int i = n; i >= 1; i--) {
      for (int b = 0; b <= 1; b++) {
        char ch = '0' + (b ^ 1);
        if (s[i] != ch) {
          len[b][i] = len[b][i + 1] + 1;
        }
      }
    }
    for (int b = 0; b <= 1; b++) {
      int l = 1;
      char ch = '0' + (b ^ 1);
      while (l <= n) {
        while (l <= n and s[l] == ch) {
          l++;
        }
        int r = l + 1;
        while (r <= n and s[r] != ch) {
          r++;
        }
        for (int x = 1; x <= r - l; x++) {
          adj[b][x].push_back(l);
        }
        l = r;
      }
    }
    for (int b = 0; b <= 1; b++) {
      for (int x = 1; x <= n; x++) {
        reverse(adj[b][x].begin(), adj[b][x].end());
      }
    }
    for (int x = 1; x <= n; x++) {
      int ans = 0;
      int l = 1;
      while (l <= n) {
        int r = 2147483647;
        for (int b = 0; b <= 1; b++) {
          char ch = '0' + b;
          if (len[b][l] >= x) {
            r = min(r, l + x);
            break;
          }
          while ((int)adj[b][x].size() and adj[b][x].back() < l) {
            adj[b][x].pop_back();
          }
          if ((int)adj[b][x].size()) {
            r = min(r, adj[b][x].back() + x);
          }
        }
        if (r < 2147483647) {
          ans++;
        }
        l = r;
      }
      cout << ans << ' ';
    }
  }
  return 0;
}
