#include <bits/stdc++.h>
using namespace std;
int fa[300100][19];
int dep[300100];
set<int> s1{1}, s2;
int LCA(int u, int v) {
  if (dep[u] > dep[v]) swap(u, v);
  int hu = dep[u], hv = dep[v];
  ;
  int tu = u, tv = v;
  for (int det = hv - hu, i = 0; det; det >>= 1, i++)
    if (det & 1) tv = fa[tv][i];
  if (tu == tv) return tu;
  for (int i = 19 - 1; i >= 0; --i) {
    if (fa[tu][i] == fa[tv][i]) continue;
    tu = fa[tu][i];
    tv = fa[tv][i];
  }
  return fa[tu][0];
}
int get_dis(int u, int v) {
  int lca = LCA(u, v);
  return dep[u] + dep[v] - 2 * dep[lca];
}
int main() {
  int n;
  scanf("%d", &n);
  dep[1] = 1;
  int mx = 1;
  fa[1][0] = 1;
  for (int i = 1; i < 19; ++i) fa[1][i] = 1;
  for (int v = 2; v <= n + 1; ++v) {
    int u;
    scanf("%d", &u);
    fa[v][0] = u;
    dep[v] = dep[u] + 1;
    for (int i = 1; i < 19; ++i) fa[v][i] = fa[fa[v][i - 1]][i - 1];
    int d1 = s1.empty() ? 0 : get_dis(v, *s1.begin());
    int d2 = s2.empty() ? 0 : get_dis(v, *s2.begin());
    if (max(d1, d2) > mx) {
      mx = max(d1, d2);
      if (d1 == mx) {
        for (int u : s2)
          if (get_dis(u, v) == mx) s1.insert(u);
        s2.clear();
        s2.insert(v);
      } else {
        for (int u : s1)
          if (get_dis(u, v) == mx) s2.insert(u);
        s1.clear();
        s1.insert(v);
      }
    } else if (max(d1, d2) == mx) {
      if (d1 >= d2)
        s2.insert(v);
      else
        s1.insert(v);
    }
    printf("%d\n", s1.size() + s2.size());
  }
  return 0;
}
