#include <bits/stdc++.h>
using namespace std;
const int N = 88;
const int INF = (int)1e9;
int n;
int a[N];
int len = 0;
int f[N];
int pref[N];
int dp[N][N][N * N / 2];
void Compress() {
  int i = 0;
  a[n + 1] = 1;
  while (i <= n) {
    int j = i + 1;
    while (j <= n + 1 && a[j] != 1) {
      j++;
    }
    f[++len] = j - i - 1;
    i = j;
  }
  for (int i = 1; i <= len; i++) {
    pref[i] = pref[i - 1] + f[i];
  }
}
int Calc(int i, int sum, int steps) {
  if (i == 0) {
    return sum == 0 && steps == 0 ? 0 : INF;
  }
  int& ret = dp[i][sum][steps];
  if (ret != -1) return ret;
  ret = INF;
  for (int prev = 0; prev <= sum; prev++) {
    int h = sum - prev;
    ret = min(ret, Calc(i - 1, prev, steps - abs(pref[i - 1] - prev)) + h * h);
  }
  return ret;
}
void Solve() {
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i];
  Compress();
  memset(dp, -1, sizeof(dp));
  int mn = INF;
  const int num_zero = pref[len];
  const int num_zero_squared = pref[len] * pref[len];
  for (int steps = 0; steps <= n * (n - 1) / 2; steps++) {
    mn = min(mn, Calc(len, num_zero, steps));
    cout << (num_zero_squared - mn) / 2 << '\n';
  }
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  Solve();
  return 0;
}
