#include <bits/stdc++.h>
using namespace std;
const int M = 1e6 + 5;
char a[M];
int n, pre[2][M], nxt[2][M];
int main() {
  scanf("%d", &n);
  scanf("%s", a + 1);
  pre[0][1] = pre[1][1] = 1;
  for (int i = 1; i <= n; i++) {
    pre[0][i] = pre[0][i - 1];
    pre[1][i] = pre[1][i - 1];
    if (a[i] != '?') pre[a[i] - '0' ^ 1][i] = i;
  }
  nxt[0][n + 1] = nxt[1][n + 1] = n + 1;
  for (int i = n; i; i--) {
    nxt[0][i] = nxt[0][i + 1];
    nxt[1][i] = nxt[1][i + 1];
    if (a[i] != '?') nxt[a[i] - '0' ^ 1][i] = i;
  }
  for (int k = 1; k <= n; k++) {
    int ans = 0;
    for (int i = 1, las = 0; i <= n; i += k) {
      if (nxt[0][i] - max(las, pre[0][i]) - 1 >= k &&
          nxt[1][i] - max(las, pre[1][i]) - 1 >= k)
        ++ans, las = max(las, min(pre[1][i], pre[0][i])) + k;
      if (nxt[0][i] - max(las, pre[0][i]) - 1 >= k)
        ++ans, las = max(las, pre[0][i]) + k;
      else if (nxt[1][i] - max(las, pre[1][i]) - 1 >= k)
        ++ans, las = max(las, pre[1][i]) + k;
    }
    printf("%d ", ans);
  }
  return 0;
}
