#include <bits/stdc++.h>
using namespace std;
const int iinf = 0x3f3f3f3f;
const long long linf = 0x3f3f3f3f3f3f3f3f;
const int N = 80;
int n, a[N], z, zn, zl[N + 1];
int f[2][N + 1][N * N / 2], ans = iinf;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  cin >> n;
  int lst = -1;
  for (int i = (0), I = (n); i < I; i++) {
    cin >> a[i];
    if (a[i] == 1) zl[zn++] = i - lst - 1, lst = i;
  }
  zl[zn++] = n - lst - 1, lst = n;
  for (int i = (1), I = (zn); i < I; i++) zl[i] += zl[i - 1];
  z = zl[zn - 1];
  for (int j = (0), I = (z + 1); j < I; j++)
    for (int k = (0), I = (n * (n - 1) / 2 + 1); k < I; k++) f[0][j][k] = iinf;
  f[0][0][0] = 0;
  for (int i = (0), I = (zn); i < I; i++) {
    for (int j = (0), I = (z + 1); j < I; j++)
      for (int k = (0), I = (n * (n - 1) / 2 + 1); k < I; k++)
        f[(i + 1) & 1][j][k] = iinf;
    for (int j = (0), I = (z + 1); j < I; j++)
      for (int k = (0), I = (n * (n - 1) / 2 + 1); k < I; k++)
        if (f[i & 1][j][k] ^ iinf)
          for (int J = (j), I = (z + 1); J < I; J++)
            f[(i + 1) & 1][J][k + abs(J - zl[i])] =
                min(f[(i + 1) & 1][J][k + abs(J - zl[i])],
                    f[i & 1][j][k] + (J - j) * (J - j));
  }
  for (int k = (0), I = (n * (n - 1) / 2 + 1); k < I; k++)
    ans = min(ans, f[zn & 1][z][k]), cout << (z * z - ans) / 2 << ' ';
  cout << '\n';
  return 0;
}
