#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma GCC optimize("unroll-loops")
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int maxn = 300007;
int n, a[maxn];
static pair<int, int> tree[maxn << 2][20];
inline int min(int u, int v) { return u > v ? v : u; }
inline int max(int u, int v) { return u > v ? u : v; }
inline void pushup(int num, int val) {
  tree[num][val] = {
      min(tree[num << 1][val].first, tree[num << 1 | 1][val].first),
      max(tree[num << 1][val].second, tree[num << 1 | 1][val].second)};
}
pair<int, int> query(int num, int l, int r, int val, int L, int R) {
  if (L <= l && r <= R) {
    return tree[num][val];
  }
  int md = (l + r) >> 1;
  if (md >= L && md >= R) {
    return query(num << 1, l, md, val, L, R);
  }
  if (md < R && md < L) {
    return query(num << 1 | 1, md + 1, r, val, L, R);
  }
  if (md < R && md >= L) {
    pair<int, int> tmp = query(num << 1, l, md, val, L, R),
                   tmp2 = query(num << 1 | 1, md + 1, r, val, L, R);
    return {min(tmp.first, tmp2.first), max(tmp.second, tmp2.second)};
  }
}
void build(int num, int l, int r, int val) {
  if (l == r) {
    if (!val) {
      tree[num][0] = {max(l - a[l], 1), min(l + a[l], 3 * n)};
    } else {
      pair<int, int> rg = query(1, 1, 3 * n, val - 1, l, l);
      tree[num][val] = query(1, 1, 3 * n, val - 1, rg.first, rg.second);
    }
    return;
  }
  int md = (l + r) >> 1;
  build(num << 1, l, md, val);
  build(num << 1 | 1, md + 1, r, val);
  pushup(num, val);
}
inline int calc(int u) {
  int ret = 0;
  pair<int, int> cnt = {u, u};
  for (int i = 16; i > -1; --i) {
    pair<int, int> tmp = query(1, 1, 3 * n, i, cnt.first, cnt.second);
    if (tmp.second - tmp.first < n - 1) {
      ret += (1 << i);
      cnt = tmp;
    }
  }
  return ret;
}
int main() {
  scanf("%d", &n);
  if (n == 1) {
    puts("0");
    return 0;
  }
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i]);
    a[i + n] = a[i + 2 * n] = a[i];
  }
  for (int i = 0; i < 17; ++i) {
    build(1, 1, 3 * n, i);
  }
  for (int i = n + 1; i <= 2 * n; ++i) {
    printf("%d ", calc(i) + 1);
  }
  return 0;
}
