```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()
}
```