#include <bits/stdc++.h>
using namespace std;
int cnt, fst[100005], nxt[100005], to[100005];
int n, sum[100005];
void AddEdge(int u, int v) {
  to[++cnt] = v;
  nxt[cnt] = fst[u];
  fst[u] = cnt;
}
void Dfs(int u) {
  bool fg = 0;
  for (int i = fst[u]; i; i = nxt[i]) {
    fg = 1;
    int v = to[i];
    Dfs(v);
    sum[u] += sum[v];
  }
  if (!fg) sum[u] = 1;
}
int main() {
  scanf("%d", &n);
  for (int i = 2; i <= n; i++) {
    int x;
    scanf("%d", &x);
    AddEdge(x, i);
  }
  Dfs(1);
  sort(sum + 1, sum + n + 1);
  for (int i = 1; i <= n; i++) printf("%d ", sum[i]);
  return 0;
}
