#include <bits/stdc++.h>
using namespace std;
namespace FGF {
int n;
const int N = 3e5 + 5;
int a[N], lo[N], b[N], c[N], l[N][25], r[N][25];
struct ST {
  int st[N][25], val[N];
  int mx(int x, int y) { return val[x] < val[y] ? y : x; }
  void build(int op) {
    for (int i = 1; i <= 3 * n; i++) {
      st[i][0] = i;
      val[i] = (op == 1 ? c[i] : -b[i]);
    }
    for (int j = 1; j <= lo[3 * n]; j++)
      for (int i = 1; i + (1 << j) - 1 <= 3 * n; i++)
        st[i][j] = mx(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
  }
  int query(int x, int y) {
    int k = lo[y - x + 1];
    return mx(st[x][k], st[y - (1 << k) + 1][k]);
  }
} rmql, rmqr;
void work() {
  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;
  }
  for (int i = 2; i <= 3 * n; i++) lo[i] = lo[i >> 1] + 1;
  for (int i = 1; i <= 3 * n; i++)
    b[i] = max(i - a[i], 1), c[i] = min(3 * n, a[i] + i);
  for (int i = 0; i <= lo[3 * n]; i++) l[1][i] = 1, r[3 * n][i] = 3 * n;
  for (int i = 1; i <= 3 * n; i++) l[i][0] = b[i], r[i][0] = c[i];
  rmql.build(-1);
  rmqr.build(1);
  for (int j = 1; j <= lo[3 * n]; j++)
    for (int i = 1; i <= 3 * n; i++) {
      int L = rmql.query(l[i][j - 1], r[i][j - 1]);
      int R = rmqr.query(l[i][j - 1], r[i][j - 1]);
      l[i][j] = min(l[L][j - 1], l[R][j - 1]);
      r[i][j] = max(r[L][j - 1], r[R][j - 1]);
    }
  for (int i = n + 1; i <= 2 * n; i++) {
    int u = i, v = i, ans = 1;
    for (int j = lo[3 * n]; j >= 0; j--) {
      if (max(r[u][j], r[v][j]) - min(l[u][j], l[v][j]) + 1 < n) {
        int L = rmql.query(l[u][j], r[v][j]);
        int R = rmqr.query(l[u][j], r[v][j]);
        u = L, v = R, ans += (1 << j);
      }
    }
    printf("%d ", ans);
  }
}
}  // namespace FGF
int main() {
  FGF::work();
  return 0;
}
