← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
)

func main() {
	in := bufio.NewReader(os.Stdin)
	var n int
	fmt.Fscan(in, &n)
	p := make([]int, n+1)
	for i := 2; i <= n; i++ {
		fmt.Fscan(in, &p[i])
	}
	adj := make([][]int, n+1)
	for i := 1; i <= n; i++ {
		adj[i] = make([]int, 0)
	}
	for i := 2; i <= n; i++ {
		adj[p[i]] = append(adj[p[i]], i)
	}
	leafcnt := make([]int, n+1)
	var dfs func(int) int
	dfs = func(u int) int {
		if len(adj[u]) == 0 {
			leafcnt[u] = 1
			return 1
		}
		sum := 0
		for _, v := range adj[u] {
			sum += dfs(v)
		}
		leafcnt[u] = sum
		return sum
	}
	dfs(1)
	vals := make([]int, 0, n)
	for i := 1; i <= n; i++ {
		vals = append(vals, leafcnt[i])
	}
	sort.Ints(vals)
	for k := 1; k <= n; k++ {
		if k > 1 {
			fmt.Print(" ")
		}
		fmt.Print(vals[k-1])
	}
	fmt.Println()
}
```