#include <bits/stdc++.h>
using namespace std;
const int L = 20;
const int INF = 1e9;
int n;
struct seg {
  int l, r;
  seg operator+(const seg &o) const { return {min(l, o.l), max(r, o.r)}; }
};
struct tree {
  int sz;
  vector<seg> a;
  void init(vector<seg> s) {
    while ((s.size() & (s.size() - 1)) != 0) s.emplace_back((seg){INF, -INF});
    a = s;
    a.insert(end(a), begin(s), end(s));
    sz = s.size();
    for (int i = sz - 1; i >= 1; i--) a[i] = a[i + i] + a[i + i + 1];
  }
  seg _get(int l, int r) {
    seg ans = {INF, -INF};
    l += sz;
    r += sz;
    while (l < r) {
      if (l & 1) ans = ans + a[l++];
      if (r & 1) ans = ans + a[--r];
      l /= 2;
      r /= 2;
    }
    return ans;
  }
  seg get(seg q) {
    int l = q.l, r = q.r;
    if (r - l >= n) return {l, r};
    seg ans = _get(max(0, l), min(n, r));
    if (l < 0) {
      auto pre = _get(n + l, n);
      pre.l -= n;
      pre.r -= n;
      ans = ans + pre;
    }
    if (r > n) {
      auto pos = _get(0, r - n);
      pos.l += n;
      pos.r += n;
      ans = ans + pos;
    }
    return ans;
  }
};
tree t[L];
int main() {
  cin >> n;
  vector<seg> tt(n);
  for (int i = 0; i < n; i++) {
    int r;
    cin >> r;
    tt[i] = {i - r, i + r + 1};
  }
  t[0].init(tt);
  for (int l = 1; l < L; l++) {
    for (int i = 0; i < n; i++) {
      tt[i] = t[l - 1].get(tt[i]);
    }
    t[l].init(tt);
  }
  for (int i = 0; i < n; i++) {
    int ans = 0;
    seg s = {i, i + 1};
    for (int l = L - 1; l >= 0; l--) {
      auto ns = t[l].get(s);
      if (ns.r - ns.l < n) {
        ans += 1 << l;
        s = ns;
      }
    }
    if (s.r - s.l < n) ans++;
    cout << ans << ' ';
  }
  return 0;
}
