#include <bits/stdc++.h>
using namespace std;
void maximize(int &a, int b) { a = max(a, b); }
void minimize(int &a, int b) { a = min(a, b); }
const int tope = 1 << 20;
const int first = 1 << 19;
void insertmax(int maximum[tope], int pos, int val) {
  pos += first;
  maximum[pos] = val;
  while (pos > 1) {
    pos /= 2;
    maximum[pos] = max(maximum[2 * pos], maximum[2 * pos + 1]);
  }
}
int maximumbetween(int maximum[tope], int pos0, int pos1) {
  if (pos0 > pos1) swap(pos0, pos1);
  pos0 += first;
  pos1 += first;
  if (pos0 == pos1) return maximum[pos0];
  int maxi = max(maximum[pos0], maximum[pos1]);
  while (pos0 + 1 < pos1) {
    if (pos0 % 2 == 0) maximize(maxi, maximum[pos0 + 1]);
    pos0 /= 2;
    if (pos1 % 2 == 1) maximize(maxi, maximum[pos1 - 1]);
    pos1 /= 2;
  }
  return maxi;
}
void insertmin(int minimum[tope], int pos, int val) {
  pos += first;
  minimum[pos] = val;
  while (pos > 1) {
    pos /= 2;
    minimum[pos] = min(minimum[2 * pos], minimum[2 * pos + 1]);
  }
}
int minimumbetween(int minimum[tope], int pos0, int pos1) {
  if (pos0 > pos1) swap(pos0, pos1);
  pos0 += first;
  pos1 += first;
  if (pos0 == pos1) return minimum[pos0];
  int mini = min(minimum[pos0], minimum[pos1]);
  while (pos0 + 1 < pos1) {
    if (pos0 % 2 == 0) minimize(mini, minimum[pos0 + 1]);
    pos0 /= 2;
    if (pos1 % 2 == 1) minimize(mini, minimum[pos1 - 1]);
    pos1 /= 2;
  }
  return mini;
}
int maximum[20][tope];
int minimum[20][tope];
int n;
int r[tope];
int sol[tope];
int main() {
  ios::sync_with_stdio(false);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> r[i];
    r[i + 2 * n] = r[i + n] = r[i];
  }
  if (n == 1) {
    cout << 0 << endl;
    exit(0);
  }
  for (int i = 1; i <= 3 * n; i++) {
    insertmax(maximum[0], i, min(3 * n, i + r[i]));
    insertmin(minimum[0], i, max(1, i - r[i]));
  }
  for (int b = 1; b < 20; b++) {
    for (int i = 1; i <= 3 * n; i++) {
      int minpos = minimum[b - 1][first + i];
      int maxpos = maximum[b - 1][first + i];
      insertmin(minimum[b], i, minimumbetween(minimum[b - 1], minpos, maxpos));
      insertmax(maximum[b], i, maximumbetween(maximum[b - 1], minpos, maxpos));
    }
  }
  for (int i = 1; i <= n; i++) {
    int &so = sol[i];
    int minpos = i + n;
    int maxpos = i + n;
    for (int b = 19; b >= 0; b--) {
      int nextminpos = minimumbetween(minimum[b], minpos, maxpos);
      int nextmaxpos = maximumbetween(maximum[b], minpos, maxpos);
      if (nextmaxpos - nextminpos + 1 < n) {
        so |= 1 << b;
        minpos = nextminpos;
        maxpos = nextmaxpos;
      }
    }
    so++;
  }
  for (int i = 1; i <= n; i++) {
    if (i > 1) cout << " ";
    cout << sol[i];
  }
  cout << endl;
}
