#include <bits/stdc++.h>
std::pair<int, int> merge(std::pair<int, int> a, std::pair<int, int> b) {
  return std::make_pair(std::min(a.first, b.first),
                        std::max(a.second, b.second));
}
template <class T>
class SegTree {
 public:
  T rec[524288 * 2];
  SegTree(T z = T()) { rec[0] = z; }
  T query(int l, int r, int hl = 0, int hr = 524288, int x = 1) {
    if (l <= hl && hr <= r) return rec[x];
    if (r <= hl || hr <= l) return rec[0];
    int hm = hl + hr >> 1;
    return merge(query(l, r, hl, hm, x << 1), query(l, r, hm, hr, x << 1 | 1));
  }
  void build(int hl = 0, int hr = 524288, int x = 1) {
    if (x >= 524288) return;
    int hm = hl + hr >> 1;
    build(hl, hm, x << 1), build(hm, hr, x << 1 | 1);
    rec[x] = merge(rec[x << 1], rec[x << 1 | 1]);
  }
  T& operator[](size_t x) { return rec[524288 + x]; }
};
int a[524288], ans[524288];
SegTree<std::pair<int, int>> st[16];
int main() {
  for (int i = 0; i < 16; ++i)
    new (st + i)
        SegTree<std::pair<int, int>>(std::make_pair(((int)1e9), -((int)1e9)));
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) scanf("%d", a + i);
  if (n == 1) return puts("0"), 0;
  for (int i = 0, j = 0; i < 524288; ++i, ++j) {
    if (j == n) j = 0;
    st[0][i] = std::make_pair(i - a[j], i + a[j] + 1);
  }
  st[0].build();
  for (int i = 1; i < 16; ++i) {
    for (int j = 0; j < 524288; ++j)
      st[i][j] = st[i - 1].query(st[i - 1][j].first, st[i - 1][j].second);
    st[i].build();
  }
  for (int i = 0; i < n; ++i) {
    std::pair<int, int> r = std::make_pair(n + i, n + i + 1);
    for (int j = 16 - 1; j >= 0; --j) {
      std::pair<int, int> r2 = st[j].query(r.first, r.second);
      if (r2.second - r2.first < n) r = r2, ans[i] += 1 << j;
    }
    ++ans[i];
  }
  for (int i = 0; i < n; ++i) printf(" %d" + !i, ans[i]);
  printf("\n");
  return 0;
}
