#include <bits/stdc++.h>
using namespace std;
const int maxn = 100050;
const int inf = 0x3f3f3f3f;
struct Seg {
  int L[maxn * 4 * 3], R[maxn * 4 * 3];
  void build(int *a, int *b, int l, int r, int id) {
    if (l == r)
      L[id] = a[l], R[id] = b[l];
    else {
      int mid = (l + r) >> 1;
      build(a, b, l, mid, id << 1);
      build(a, b, mid + 1, r, id << 1 | 1);
      L[id] = min(L[id << 1], L[id << 1 | 1]);
      R[id] = max(R[id << 1], R[id << 1 | 1]);
    }
  }
  pair<int, int> query(int x, int y, int l, int r, int id) {
    if (x <= l && y >= r) return {L[id], R[id]};
    int mid = (l + r) >> 1;
    pair<int, int> ans(inf, -inf);
    if (x <= mid) {
      pair<int, int> t = query(x, y, l, mid, id << 1);
      ans.first = min(ans.first, t.first);
      ans.second = max(ans.second, t.second);
    }
    if (y > mid) {
      pair<int, int> t = query(x, y, mid + 1, r, id << 1 | 1);
      ans.first = min(ans.first, t.first);
      ans.second = max(ans.second, t.second);
    }
    return ans;
  }
} seg[20];
int n, A[20][maxn * 3], B[20][maxn * 3], a[maxn * 3];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", a + i);
    a[i + n] = a[i + n + n] = a[i];
  }
  if (n == 1) {
    puts("0");
    return 0;
  }
  const int N = n * 3;
  for (int j = 0; (1 << j) <= N; ++j) {
    for (int i = 1; i <= N; ++i) {
      if (j == 0) {
        A[j][i] = max(1, i - a[i]);
        B[j][i] = min(N, i + a[i]);
      } else {
        pair<int, int> t = seg[j - 1].query(A[j - 1][i], B[j - 1][i], 1, N, 1);
        A[j][i] = t.first, B[j][i] = t.second;
      }
    }
    seg[j].build(A[j], B[j], 1, N, 1);
  }
  int D = 1;
  while ((1 << (D + 1)) <= N) ++D;
  for (int k = 1; k <= n; ++k) {
    int l = k + n, r = k + n;
    int ans = 0;
    for (int i = D; i >= 0; --i) {
      pair<int, int> t = seg[i].query(l, r, 1, N, 1);
      if (t.second - t.first + 1 < n) {
        ans += (1 << i);
        l = t.first, r = t.second;
      }
    }
    printf("%d\n", ans + 1);
  }
  return 0;
}
