#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T lowbit(T x) {
  return x & (-x);
}
template <class T>
T gcd(T a, T b) {
  return b ? gcd(b, a % b) : a;
}
template <class T>
inline T Pow(T a, T b, T p) {
  T ret = 1;
  for (; b; b >>= 1, a = a * a % p)
    if (b & 1) (ret *= a) %= p;
  return ret;
}
template <class T>
inline void read(T &ret) {
  T x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  ret = x * f;
}
const int N = 3e5 + 10, lgN = 18;
struct Tree {
  int sgt[N * 4][2];
  void build(int i, int b, int e, int *l, int *r) {
    if (b == e) {
      sgt[i][0] = l[b];
      sgt[i][1] = r[b];
      return;
    }
    int mid = (b + e) >> 1, lc = i << 1, rc = lc | 1;
    build(lc, b, mid, l, r);
    build(rc, mid + 1, e, l, r);
    sgt[i][0] = min(sgt[lc][0], sgt[rc][0]);
    sgt[i][1] = max(sgt[lc][1], sgt[rc][1]);
  }
  pair<int, int> query(int i, int b, int e, int l, int r) {
    if (l > r || e < l || r < b)
      return make_pair((long long)0x3f3f3f3f, -(long long)0x3f3f3f3f);
    if (l <= b && e <= r) return make_pair(sgt[i][0], sgt[i][1]);
    int mid = (b + e) >> 1, lc = i << 1, rc = lc | 1;
    pair<int, int> lw = query(lc, b, mid, l, r);
    pair<int, int> rw = query(rc, mid + 1, e, l, r);
    return make_pair(min(lw.first, rw.first), max(lw.second, rw.second));
  }
} t[lgN];
int n, lgn, a[N], l[2][N], r[2][N];
int calc(int x) {
  int ret = 0, l0 = n + x, r0 = n + x;
  for (int i = (lgn); i >= (0); i--) {
    pair<int, int> pr = t[i].query(1, 1, 3 * n, l0, r0);
    int l1 = pr.first, r1 = pr.second;
    if (r1 - l1 + 1 < n) l0 = l1, r0 = r1, ret += 1 << i;
  }
  return ret + 1;
}
int main() {
  read(n);
  lgn = ceil(log2(n));
  if (n == 1) {
    printf("0");
    return 0;
  }
  for (int i = (1); i <= (n); i++) read(a[i]);
  for (int i = (1); i <= (n); i++)
    for (int j = (0); j <= (2); j++) {
      l[0][j * n + i] = max(1, j * n + i - a[i]);
      r[0][j * n + i] = min(3 * n, j * n + i + a[i]);
    }
  t[0].build(1, 1, 3 * n, l[0], r[0]);
  for (int i = (1); i <= (lgn); i++) {
    for (int j = (1); j <= (3 * n); j++) {
      int lp = l[(i - 1) & 1][j], rp = r[(i - 1) & 1][j];
      pair<int, int> pr = t[i - 1].query(1, 1, 3 * n, lp, rp);
      l[i & 1][j] = pr.first;
      r[i & 1][j] = pr.second;
    }
    t[i].build(1, 1, 3 * n, l[i & 1], r[i & 1]);
  }
  for (int i = (1); i <= (n); i++) printf("%d ", calc(i));
}
