올바른 괄호 문자열은 문자 (와 )로만 이루어진 문자열 중에서, 여는 괄호마다 짝이 되는 닫는 괄호가 있고 닫는 괄호마다 짝이 되는 여는 괄호가 있는 문자열이다. 예를 들어 (())()는 올바른 괄호 문자열이지만, (())(()와 ())(()는 아니다.
길이가 같은 두 괄호 문자열 A와 B가 다음 두 조건을 모두 만족하면 A가 B보다 사전순으로 작다고 하고 A<B로 쓴다.
- A와 B가 적어도 한 자리에서 다르다.
- A와 B가 처음으로 달라지는 가장 왼쪽 자리에서 A는
(이고 B는 )이다.
예를 들어 (())()<()()()이다. 두 문자열은 왼쪽에서 두 번째 자리에서 처음 달라지는데, 앞 문자열은 그 자리가 (이고 뒤 문자열은 )이기 때문이다.
길이 N을 고정하면 < 관계가 길이 N인 올바른 괄호 문자열 전체의 순서를 정한다. N=6일 때 순서는 다음과 같다.
((()))
(()())
(())()
()(())
()()()
N과 양의 정수 M이 주어질 때, 이 순서에서 M번째 올바른 괄호 문자열을 구하라.