#include <bits/stdc++.h>
using namespace std;
vector<int> fillvec(int size) {
  vector<int> ans;
  for (int i = 0; i < size; i++) {
    int temp;
    cin >> temp;
    ans.push_back(temp);
  }
  return ans;
}
int gcd(int a, int b) { return !a ? b : gcd(b % a, a); }
vector<long long> getdivisors(long long n) {
  vector<long long> ans;
  for (long long i = 1; i <= sqrt(n); i++) {
    if (n % i == 0) {
      if (n / i == i) {
        ans.push_back(i);
      } else {
        ans.push_back(i);
        ans.push_back(n / i);
      }
    }
  }
  return ans;
}
vector<int> zp;
int closest(int n) {
  auto p1 = lower_bound(zp.begin(), zp.end(), n);
  if (p1 == zp.begin()) {
    return *p1;
  }
  int p2 = zp[(p1 - zp.begin()) - 1];
  if (p1 == zp.end()) {
    return p2;
  }
  if (abs(*p1 - n) < abs(p2 - n)) {
    return *p1;
  } else {
    return p2;
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  vector<int> nb = fillvec(n);
  for (int i = 0; i < n; i++) {
    if (nb[i] == 0) {
      zp.push_back(i);
    }
  }
  for (int i = 0; i < n; i++) {
    if (nb[i] == 0) {
      cout << 0 << " ";
    } else {
      cout << abs(i - closest(i)) << " ";
    }
  }
}
