괄호 표현식

시간 제한1초메모리 제한128 MB

문제

집합 $X$를 다음 규칙으로 정의되는 가장 작은 집합이라고 하자.

  • 빈 문자열은 $X$에 속한다.
  • $A$와 $B$가 $X$에 속하면 $(A)$와 $AB$도 모두 $X$에 속한다.

$X$의 원소를 올바른 괄호 표현식이라고 부른다. 예를 들어 다음 문자열들은 올바른 괄호 표현식이다.

()(())()
(()(()))

반면 다음 문자열들은 올바른 괄호 표현식이 아니다.

(()))(()
())(()

올바른 괄호 표현식 $E$에 대해, $E$의 길이는 $E$에 들어 있는 괄호 문자의 개수이다. $E$의 깊이 $D(E)$는 다음과 같이 정의된다.

$$ D(E) = \begin{cases} 0 & E\text{가 빈 문자열인 경우} \ D(A) + 1 & E = (A),\ A \in X \text{인 경우} \ \max(D(A), D(B)) & E = AB,\ A, B \in X \text{인 경우} \end{cases} $$

두 양의 정수 $n$과 $d$가 주어질 때, 길이가 정확히 $n$이고 깊이가 정확히 $d$인 올바른 괄호 표현식의 개수를 구하여라.

입력

한 줄에 두 정수 $n$과 $d$가 공백 하나로 구분되어 주어진다. $2 \le n \le 38$, $1 \le d \le 19$이다.

출력

길이가 $n$이고 깊이가 $d$인 올바른 괄호 표현식의 개수를 정수 하나로 출력한다.

힌트

길이가 $6$이고 깊이가 $2$인 올바른 괄호 표현식은 정확히 세 개 있다.

(())()
()(())
(()())