#include <bits/stdc++.h>
const int N = 300005, M = 19;
int n, m, a[N];
struct rmq {
  int st[M][N], val[N];
  int _min(int x, int y) const { return val[x] < val[y] ? x : y; }
  void init() {
    for (int i = 0; i < m; ++i) st[0][i] = i;
    for (int i = 1; i < M; ++i)
      for (int j = 0; j <= m - (1 << i); ++j)
        st[i][j] = _min(st[i - 1][j], st[i - 1][j + (1 << i - 1)]);
  }
  int query(int l, int r) {
    int k = 31 - __builtin_clz(r - l + 1);
    return _min(st[k][l], st[k][r - (1 << k) + 1]);
  }
} L, R;
int lpos[M][N], rpos[M][N];
int main() {
  std::ios::sync_with_stdio(0), std::cin.tie(0);
  std::cin >> n, m = 3 * n;
  if (n == 1) return std::cout << "0\n", 0;
  for (int i = 0; i < n; ++i) std::cin >> a[i];
  for (int i = n; i < m; ++i) a[i] = a[i - n];
  for (int i = 0; i < m; ++i) L.val[i] = i - a[i], R.val[i] = -(i + a[i]);
  L.init(), R.init();
  for (int i = 0; i < m; ++i)
    lpos[0][i] = std::max(0, i - a[i]), rpos[0][i] = std::min(m - 1, i + a[i]);
  for (int i = 1; i < M; ++i)
    for (int j = 0; j < m; ++j) {
      int l = L.query(lpos[i - 1][j], rpos[i - 1][j]);
      int r = R.query(lpos[i - 1][j], rpos[i - 1][j]);
      lpos[i][j] = std::min(lpos[i - 1][l], lpos[i - 1][r]);
      rpos[i][j] = std::max(rpos[i - 1][l], rpos[i - 1][r]);
    }
  for (int i = n; i < n + n; ++i) {
    int l = i, r = i, ans = 0;
    for (int j = M - 1; ~j; --j) {
      int _l = std::min(lpos[j][l], lpos[j][r]);
      int _r = std::max(rpos[j][l], rpos[j][r]);
      if (_r - _l + 1 < n) {
        ans += 1 << j;
        l = L.query(_l, _r);
        r = R.query(_l, _r);
      }
    }
    std::cout << ans + 1 << ' ';
  }
  return 0;
}
