#include <bits/stdc++.h>
using namespace std;
const int maxn = 200100;
const int INF = 0x3f3f3f3f;
int n;
int r[maxn];
int d[maxn];
void bfs() {
  queue<pair<int, int> > que;
  while (!que.empty()) que.pop();
  d[1] = 0;
  que.push(pair<int, int>(1, 0));
  int u, w;
  while (!que.empty()) {
    u = que.front().first;
    w = que.front().second;
    que.pop();
    if (w > d[u]) continue;
    if (u > 1 && d[u - 1] > d[u] + 1) {
      d[u - 1] = d[u] + 1;
      que.push(pair<int, int>(u - 1, d[u - 1]));
    }
    if (u < n && d[u + 1] > d[u] + 1) {
      d[u + 1] = d[u] + 1;
      que.push(pair<int, int>(u + 1, d[u + 1]));
    }
    if (d[r[u]] > d[u] + 1) {
      d[r[u]] = d[u] + 1;
      que.push(pair<int, int>(r[u], d[r[u]]));
    }
  }
  return;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    d[i] = INF;
    scanf("%d", &r[i]);
  }
  bfs();
  for (int i = 1; i <= n; ++i) printf("%d ", d[i]);
  return 0;
}
