올바른 괄호 문자열은 여는 괄호 (와 닫는 괄호 )로 이루어진 문자열 중, 여는 괄호의 개수와 닫는 괄호의 개수가 같고, 모든 접두사에서 여는 괄호의 개수가 닫는 괄호의 개수 이상인 문자열을 말한다. 예를 들어 ()()는 올바른 괄호 문자열이지만, ())(는 접두사 ())에서 닫는 괄호가 여는 괄호보다 많으므로 올바른 괄호 문자열이 아니다.
길이가 2n인 두 올바른 괄호 문자열이 있을 때, 두 문자열이 처음으로 달라지는 위치에서 여는 괄호를 가진 쪽을 더 앞선 문자열이라고 한다. 이 순서는 (를 )보다 작다고 볼 때의 사전순과 정확히 같다.
두 정수 n과 k를 입력받아, 길이가 2n인 모든 올바른 괄호 문자열 중 사전순으로 k번째인 것을 찾아 출력하는 프로그램을 작성하시오. (괄호 문자열의 번호는 1번부터 매긴다.)
n과 k 두 정수가 공백 하나로 구분되어 한 줄에 주어진다 (1≤n≤4000, 1≤k≤1018).
길이가 2n인 모든 올바른 괄호 문자열을 사전순으로 나열했을 때 k번째에 오는 괄호 문자열을 한 줄에 출력한다. 입력은 항상 그러한 괄호 문자열이 존재하도록 주어진다.