#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > g;
vector<int> d;
void DFS() {
  queue<int> q;
  q.push(0);
  d[0] = 0;
  while (!q.empty()) {
    int cur = q.front();
    q.pop();
    for (int i = 0; i < g[cur].size(); i++) {
      if (d[g[cur][i]] == -1) {
        d[g[cur][i]] = d[cur] + 1;
        q.push(g[cur][i]);
      }
    }
  }
}
int main() {
  int n;
  cin >> n;
  g.assign(n, vector<int>());
  d.assign(n, -1);
  for (int i = 0; i < n; i++) {
    if (i < n - 1) g[i].push_back(i + 1);
    if (i > 0) g[i].push_back(i - 1);
    int a;
    cin >> a;
    a--;
    g[i].push_back(a);
  }
  DFS();
  for (int i = 0; i < n; i++) {
    cout << d[i] << " ";
  }
  return 0;
}
