#include <bits/stdc++.h>
using namespace std;
const int infint = 1e9;
const long long inf = 1e18;
const int MOD = (int)1e9 + 7;
const int MAXN = (int)3e5 + 7;
const int LOG = 17;
int a[MAXN], n, IL[MAXN], IR[MAXN], Lp, Rp, ans, L, R;
pair<int, int> G, seg[LOG][2 * MAXN];
pair<int, int> operator*(const pair<int, int> &a, pair<int, int> b) {
  return {min(a.first, b.first), max(a.second, b.second)};
}
void update(int BASE, int idx, int x, int y) {
  for (seg[BASE][idx += 3 * n] = {x, y}; idx > 1; idx >>= 1)
    seg[BASE][idx >> 1] = seg[BASE][idx] * seg[BASE][idx ^ 1];
}
pair<int, int> get(int BASE, int l, int r) {
  pair<int, int> res = {3 * n, 0};
  for (l += 3 * n, r += 3 * n; l < r; l >>= 1, r >>= 1) {
    if (l & 1) res = res * seg[BASE][l++];
    if (r & 1) res = res * seg[BASE][--r];
  }
  return res;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  for (int i = n; i < 3 * n; i++) a[i] = a[i % n];
  for (int i = 0; i < LOG; i++)
    for (int j = 0; j < MAXN; j++) seg[i][j] = {3 * n, 0};
  for (int i = 0; i < 3 * n; i++) {
    update(0, i, max(0, i - a[i]), min(i + a[i], 3 * n - 1));
    IL[i] = max(0, i - a[i]), IR[i] = min(i + a[i], 3 * n - 1);
  }
  for (int i = 1; i < LOG; i++) {
    for (int j = 0; j < 3 * n; j++) {
      G = get(i - 1, IL[j], IR[j] + 1);
      Lp = G.first, Rp = G.second;
      IL[j] = Lp, IR[j] = Rp;
      update(i, j, Lp, Rp);
    }
  }
  if (n == 1) return cout << 0, 0;
  for (int j = n; j < 2 * n; j++) {
    ans = 0, L = j, R = j;
    for (int lg = 16; lg >= 0; lg--) {
      G = get(lg, L, R + 1);
      if (G.second - G.first + 1 < n) {
        ans += (1 << lg);
        Lp = G.first, Rp = G.second;
        L = Lp, R = Rp;
      }
    }
    printf("%d ", ans + 1);
  }
}
