from math import *
mod = 10**9+7
comb = [factorial((1<<i+1)-2)//(factorial((1<<i)-1)**2)%mod for i in range(11)]
DP = [1]
for i in range(10):
DP.append(DP[-1]**2*comb[i+1]%mod)
print(DP[int(input())])
간단한 DP 문제
아이디어를 설명하면,
1. H일 일때 총 생물을 x+1마리라고 하자.
2. 부모노드는 가장 작은 숫자로 고정되므로 부모노드 1개를 빼준다. 우리는 x마리의 배치만 고려하면 된다.
3. 나머지 x마리는 서로 각각의 자식노드의 트리에 절반씩 들어가게 된다.
4. 이때 각각의 자식노드 트리에 들어갈 자식을 뽑는 경우의 수는 xCx/2 이다. (X마리에서 X/2마리를 뽑으므로)
5. 자식노드 트리에 들어갈 자식을 뽑았으면, 각각의 자식노드 트리는 H-1일 일때의 경우의 수와 같다.
6. 따라서 점화식은 DP[n] = DP[n-1]^2 * xCx/2 가 된다.
4번의 조합은 math 모듈을 이용해 구해주었다.
참고로 이 문제는 입력값의 범위가 굉장히 작으므로 다음과 같은 코드로도 통과할 수 있다.
print([1,2,80,21964800,203434154,665258152,262441328,624193013,500166290,953655653,340670650][int(input())])