#!/usr/bin/env python3 # Solution idea: per node, determine the number of subtrees of each size that contain that node # This can be computed using a DFS and convolving the values of the children nodes # Read input n = int(input()) MOD = 10**9+7 tree = [[] for i in range(n)] for a,b in [(i, int(input())) for i in range(1, n)]: tree[a].append(b) tree[b].append(a) # Construct DFS ordering without recursion dfs_order = [0] for i in range(n): v = dfs_order[i] for w in tree[v]: dfs_order.append(w) tree[w].remove(v) # Convolve the solutions per node in DFS order total = [0]*n answer = [[]]*n for v in reversed(dfs_order): answer[v] = [1] for w in tree[v]: answer[v] += [0]*len(answer[w]) for i1,c1 in reversed(list(enumerate(answer[v]))): if c1 == 0: continue for i2,c2 in enumerate(answer[w]): answer[v][i1+i2+1] += c1*c2 for i in range(len(answer[v])): answer[v][i] %= MOD for i,c in enumerate(answer[v]): total[i] += c for c in total: print(c % MOD)