#include <bits/stdc++.h>
using namespace std;
const int N = 310000, K = N << 2;
int n, a[N], stR[N][19], stL[N][19], lim, lt[K], rt[K], minV[K][19],
    maxV[K][19];
template <class T>
inline void read(T &x) {
  x = 0;
  char ch = getchar(), w = 0;
  while (!isdigit(ch)) w = (ch == '-'), ch = getchar();
  while (isdigit(ch)) x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
  x = w ? -x : x;
  return;
}
void build(int k) {
  if (lt[k] == rt[k]) {
    minV[k][0] = stL[lt[k]][0], maxV[k][0] = stR[rt[k]][0];
    return;
  }
  int mid = (lt[k] + rt[k]) >> 1, l = k << 1, r = (k << 1) + 1;
  lt[l] = lt[k], rt[l] = mid, lt[r] = mid + 1, rt[r] = rt[k];
  build(l), build(r);
  minV[k][0] = min(minV[l][0], minV[r][0]),
  maxV[k][0] = max(maxV[l][0], maxV[r][0]);
  return;
}
void rebuild(int k, int lv) {
  if (lt[k] == rt[k]) {
    minV[k][lv] = stL[lt[k]][lv], maxV[k][lv] = stR[rt[k]][lv];
    return;
  }
  int l = k << 1, r = (k << 1) + 1;
  rebuild(l, lv), rebuild(r, lv);
  minV[k][lv] = min(minV[l][lv], minV[r][lv]),
  maxV[k][lv] = max(maxV[l][lv], maxV[r][lv]);
  return;
}
void query(int k, int x, int y, int lv, int &ansMin, int &ansMax) {
  if (lt[k] >= x && rt[k] <= y) {
    ansMin = min(ansMin, minV[k][lv]), ansMax = max(ansMax, maxV[k][lv]);
    return;
  }
  int mid = (lt[k] + rt[k]) >> 1, l = k << 1, r = (k << 1) + 1;
  if (x <= mid) query(l, x, y, lv, ansMin, ansMax);
  if (y > mid) query(r, x, y, lv, ansMin, ansMax);
  return;
}
int main() {
  read(n), lim = 3 * n;
  if (n == 1) {
    for (register int i = 1; i <= n; ++i) printf("0 ");
    return 0;
  }
  for (register int i = 1; i <= n; ++i)
    read(a[i]), a[i + n] = a[i + 2 * n] = a[i];
  memset(stL, 0x3f, sizeof(stL));
  for (register int i = 1; i <= lim; ++i)
    stR[i][0] = min(lim, i + a[i]), stL[i][0] = max(1, i - a[i]);
  lt[1] = 1, rt[1] = lim, build(1);
  for (register int i = 1; i <= 18; ++i) {
    for (register int j = 1; j <= lim; ++j)
      query(1, stL[j][i - 1], stR[j][i - 1], i - 1, stL[j][i], stR[j][i]);
    rebuild(1, i);
  }
  for (register int i = n + 1; i <= n + n; ++i) {
    int lp = i, rp = i, ans = 0, ansMin, ansMax;
    for (register int j = 18; ~j; --j) {
      ansMin = lp, ansMax = rp;
      query(1, lp, rp, j, ansMin, ansMax);
      if (ansMax - ansMin + 1 < n) lp = ansMin, rp = ansMax, ans |= 1 << j;
    }
    printf("%d ", ans + 1);
  }
  return 0;
}
