#include <bits/stdc++.h>
using namespace std;
int n, p[1000002], ans;
pair<int, int> a[1000002][2];
void refresh(int ver) {
  int cur_par = p[ver];
  int cur_ans = 1;
  while (cur_par != 0) {
    if (cur_ans >= a[cur_par][0].first) {
      if (ver == a[cur_par][0].second) {
        if (a[cur_par][0].first < cur_ans)
          a[cur_par][0].first = cur_ans;
        else
          break;
      } else {
        if (a[cur_par][0].first < cur_ans) {
          a[cur_par][1].first = a[cur_par][0].first;
          a[cur_par][1].second = a[cur_par][0].second;
          a[cur_par][0].first = cur_ans;
          a[cur_par][0].second = ver;
        } else {
          if (a[cur_par][0].first > a[cur_par][1].first) {
            a[cur_par][1].first = a[cur_par][0].first;
            a[cur_par][1].second = a[cur_par][0].second;
            a[cur_par][0].second = ver;
          } else
            break;
        }
      }
    } else if (cur_ans > a[cur_par][1].first) {
      a[cur_par][1].first = cur_ans;
      a[cur_par][1].second = ver;
    } else
      break;
    cur_ans = max(a[cur_par][0].first, a[cur_par][1].first + 1);
    ver = cur_par;
    cur_par = p[cur_par];
  }
}
int main() {
  scanf("%d", &n);
  ans = 1;
  for (int i = 1; i <= n; i++) {
    int num;
    scanf("%d", &num);
    p[i + 1] = num;
    refresh(i + 1);
    ans = max(a[1][0].first, a[1][1].first);
    printf("%d ", ans);
  }
  return 0;
}
