#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void read(T &x) {
  x = 0;
  char c = getchar();
  int f = 1;
  while (!isdigit(c)) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    x = x * 10 + c - '0';
    c = getchar();
  }
  x *= f;
}
template <class T>
inline void umin(T &x, T y) {
  x = x < y ? x : y;
}
template <class T>
inline void umax(T &x, T y) {
  x = x > y ? x : y;
}
inline unsigned int R() {
  static unsigned int seed = 416;
  return seed ^= seed >> 5, seed ^= seed << 17, seed ^= seed >> 13;
}
const int N = 303000;
int n, a[N];
struct QaQ {
  pair<int, int> a[N << 2], seg[N];
  int m;
  inline pair<int, int> merge(pair<int, int> a, pair<int, int> b) {
    return pair<int, int>(min(a.first, b.first), max(a.second, b.second));
  }
  inline pair<int, int> query(int l, int r) {
    pair<int, int> res(1e9, 0);
    l = l + m - 1;
    r = r + m + 1;
    while ((l >> 1) != (r >> 1)) {
      if (!(l & 1)) res = merge(res, a[l + 1]);
      if (r & 1) res = merge(res, a[r - 1]);
      l >>= 1;
      r >>= 1;
    }
    return res;
  }
  inline void init() {
    for (m = 1; m <= 3 * n + 1; m <<= 1)
      ;
    for (register int i = (1); i <= (3 * n); i++) a[m + i] = seg[i];
    for (register int i = (m - 1); i >= (1); i--)
      a[i] = merge(a[i << 1], a[i << 1 | 1]);
  }
} qaq[17];
inline void fix(pair<int, int> &a) {
  umax(a.first, 1);
  umin(a.second, 3 * n);
}
int main() {
  read(n);
  for (register int i = (1); i <= (n); i++)
    read(a[i]), a[n + i] = a[n + n + i] = a[i];
  for (register int i = (1); i <= (3 * n); i++)
    qaq[0].seg[i] = pair<int, int>(i - a[i], i + a[i]), fix(qaq[0].seg[i]);
  qaq[0].init();
  for (register int j = (1); j <= (16); j++) {
    for (register int i = (n + 1); i <= (n + n); i++) {
      pair<int, int> tmp =
          qaq[j - 1].query(qaq[j - 1].seg[i].first, qaq[j - 1].seg[i].second);
      qaq[j].seg[i] = tmp;
      qaq[j].seg[i - n] = pair<int, int>(tmp.first - n, tmp.second - n);
      qaq[j].seg[i + n] = pair<int, int>(tmp.first + n, tmp.second + n);
    }
    for (register int i = (1); i <= (3 * n); i++) fix(qaq[j].seg[i]);
    qaq[j].init();
  }
  for (register int i = (n + 1); i <= (n + n); i++) {
    int l = i, r = i, res = 0;
    for (register int j = (16); j >= (0); j--) {
      pair<int, int> now = qaq[j].query(l, r);
      if (now.second - now.first + 1 < n)
        res += 1 << j, l = now.first, r = now.second;
    }
    printf("%d ", n > 1 ? res + 1 : 0);
  }
  return 0;
}
