#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5;
int d[maxn];
std::vector<int> G[maxn];
int dp(int u) {
  if ((int)G[u].size() == 0) {
    return d[u] = 1;
  } else if (d[u]) {
    return d[u];
  }
  for (int i : G[u]) {
    d[u] += dp(i);
  }
  return d[u];
}
int c[maxn];
int main(int argc, char const *argv[]) {
  int n;
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  for (int i = 2; i <= n; ++i) {
    int u;
    cin >> u;
    G[u].push_back(i);
  }
  dp(1);
  for (int i = 1; i <= n; ++i) {
    c[d[i]]++;
  }
  int sum = c[1];
  int res = 1;
  for (int i = 1; i <= n; ++i) {
    while (i > sum) {
      sum += c[++res];
    }
    cout << res << ' ';
  }
  return 0;
}
