#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
const int logN = 20;
int par[N][logN], depth[N];
void add(int v, int p) {
  depth[v] = depth[p] + 1;
  par[v][0] = p;
  for (int i = 1; i < logN; i++) {
    if (par[v][i - 1] + 1) {
      par[v][i] = par[par[v][i - 1]][i - 1];
    }
  }
}
int lca(int u, int v) {
  if (depth[u] > depth[v]) swap(u, v);
  for (int i = logN - 1; i >= 0; i--) {
    if (par[v][i] + 1 && depth[par[v][i]] >= depth[u]) v = par[v][i];
  }
  if (v == u) return v;
  for (int i = logN - 1; i >= 0; i--) {
    if (par[v][i] != par[u][i]) {
      v = par[v][i];
      u = par[u][i];
    }
  }
  return par[v][0];
}
int dist(int u, int v) { return depth[u] + depth[v] - 2 * depth[lca(u, v)]; }
int main() {
  int q;
  scanf("%d", &q);
  memset(par, -1, sizeof par);
  for (int i = 2; i <= 4; i++) add(i, 1);
  int tot = 4, far1 = 2, far2 = 3;
  while (q--) {
    int p;
    scanf("%d", &p);
    int u = tot + 1, v = tot + 2;
    add(u, p);
    add(v, p);
    int x = dist(far1, far2), y = dist(far1, u), z = dist(far2, u);
    if (x >= y && x >= z) {
      printf("%d\n", x);
    } else if (y >= z && y >= x) {
      far2 = u;
      printf("%d\n", y);
    } else if (z >= y && z >= x) {
      far1 = u;
      printf("%d\n", z);
    }
    tot += 2;
  }
  return 0;
}
