#include <bits/stdc++.h>
using namespace std;
const int nm = 1000008;
int n, k, m, t, q, u, v, dodai;
int anc[nm][22], d[nm];
void Set(int i, int x) {
  int v1 = (5 + (i - 1) * 2), v2 = v1 + 1;
  anc[v1][0] = x;
  anc[v2][0] = x;
  d[v1] = d[v2] = d[x] + 1;
  i = 1;
  for (i = 1; i <= 21; i++) {
    anc[v1][i] = anc[anc[v1][i - 1]][i - 1];
    anc[v2][i] = anc[anc[v2][i - 1]][i - 1];
  }
}
int path(int x, int y) {
  int i, j;
  if (d[x] < d[y]) swap(x, y);
  int v1 = x, v2 = y;
  for (i = 21; i >= 0; i--)
    if (d[anc[v1][i]] >= d[v2]) v1 = anc[v1][i];
  for (i = 21; i >= 0; i--)
    if (anc[v1][i] != anc[v2][i]) {
      v1 = anc[v1][i];
      v2 = anc[v2][i];
    }
  if (v1 != v2) v1 = anc[v1][0];
  return d[x] + d[y] - 2 * d[v1];
}
int main() {
  int i, j, x, y, z, w, d1, d2;
  for (i = 2; i <= 4; i++) {
    d[i] = 1;
    anc[i][0] = 1;
  }
  scanf("%d", &q);
  u = 2;
  v = 3;
  dodai = 2;
  for (i = 1; i <= q; i++) {
    scanf("%d", &z);
    Set(i, z);
    x = (5 + (i - 1) * 2);
    y = x + 1;
    d1 = path(x, u);
    d2 = path(x, v);
    if (d1 > dodai) v = x, dodai = d1;
    if (d2 > dodai) u = x, dodai = d2;
    printf("%d\n", dodai);
  }
}
