#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
const int logN = 20;
const int inf = 1e8;
vector<vector<int> > lidx(N, vector<int>(logN, 0));
vector<vector<int> > ridx(N, vector<int>(logN, 0));
int n;
int lp[N];
int rp[N];
pair<int, int> t[4 * N][logN];
void b0(int root = 1, int l = 0, int r = n) {
  if (r - l == 1) {
    t[root][0] = pair<int, int>(lp[l], rp[l]);
    return;
  }
  int mid = (l + r) / 2;
  b0(2 * root, l, mid);
  b0(2 * root + 1, mid, r);
  t[root][0] =
      pair<int, int>(min(t[2 * root][0].first, t[2 * root + 1][0].first),
                     max(t[2 * root][0].second, t[2 * root + 1][0].second));
}
pair<int, int> qseg(int l, int r, int k);
void build(int root, int k, int l = 0, int r = n) {
  if (r - l == 1) {
    pair<int, int> p = qseg(l, r - 1, k - 1);
    t[root][k] = qseg(p.first, p.second, k - 1);
    return;
  }
  int mid = (l + r) / 2;
  build(2 * root, k, l, mid);
  build(2 * root + 1, k, mid, r);
  t[root][k] =
      pair<int, int>(min(t[2 * root][k].first, t[2 * root + 1][k].first),
                     max(t[2 * root][k].second, t[2 * root + 1][k].second));
}
pair<int, int> query(int root, int k, int l, int r, int L = 0, int R = n) {
  if (l == L and r == R) return t[root][k];
  int mid = (L + R) / 2;
  pair<int, int> res = pair<int, int>(inf, -1 * inf);
  if (l < mid) {
    res = query(2 * root, k, l, min(mid, r), L, mid);
  }
  if (r > mid) {
    pair<int, int> q1 = query(2 * root + 1, k, max(mid, l), r, mid, R);
    res = pair<int, int>(min(res.first, q1.first), max(res.second, q1.second));
  }
  return res;
}
pair<int, int> qseg(int l, int r, int k) {
  if ((l < 0 and r >= n) or l == -n or r == 2 * n - 1)
    return pair<int, int>(l, r);
  if (l < 0) {
    pair<int, int> p1 = query(1, k, 0, r + 1);
    pair<int, int> p2 = query(1, k, l + n, n);
    return pair<int, int>(min(p1.first, max(p2.first - n, -n)),
                          max(p1.second, p2.second - n));
  }
  if (r >= n) {
    pair<int, int> p1 = query(1, k, l, n);
    pair<int, int> p2 = query(1, k, 0, r + 1 - n);
    return pair<int, int>(min(p2.first + n, p1.first),
                          max(p1.second, min(2 * n - 1, p2.second + n)));
  }
  return query(1, k, l, r + 1);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n;
  for (int i = 0, rg; i < n; ++i) {
    cin >> rg;
    lp[i] = i - rg;
    rp[i] = i + rg;
  }
  if (n == 1) {
    cout << 0;
    return 0;
  }
  b0();
  for (int i = 1; i < logN; ++i) {
    build(1, i);
  }
  for (int i = 0; i < n; ++i) {
    int res = 0;
    int pow = logN - 1;
    int ml = i, mr = i;
    while (pow >= 0) {
      pair<int, int> p = qseg(ml, mr, pow);
      if (p.second - p.first + 1 >= n) {
        pow--;
        continue;
      }
      ml = p.first;
      mr = p.second;
      res += (1 << pow);
      pow--;
    }
    res++;
    cout << res << " ";
  }
}
