좋은 문자열은 다음과 같이 정의한다.
- 문자열
()는 좋은 문자열이다.
- S가 좋은 문자열이면
(SS...S)도 좋은 문자열이다. 즉, 같은 좋은 문자열 하나를 한 번 이상 이어 붙인 뒤 전체를 괄호로 감싼 문자열은 좋은 문자열이다.
- 위의 두 경우를 제외하면 좋은 문자열은 없다.
문자열 X의 부분 수열은 X에서 문자를 0개 이상 지워서 얻은 문자열이다.
문자열 S가 주어진다. S의 각 문자는 ( 또는 )이다.
S의 부분 수열 중 좋은 문자열인 것을 서로 다른 것만 모은 집합을 G라고 하자. G는 집합이므로 같은 좋은 문자열이 부분 수열로 여러 번 나타나도 G에는 하나만 들어 있다. 예를 들어 S = (()())이면 G에는 (), (()), (()())가 들어 있다.
K가 주어졌을 때 G에 들어 있는 문자열 중 사전 순으로 K번째인 문자열을 구하는 프로그램을 작성하시오. 순서는 1부터 센다. 사전 순으로 비교할 때 (는 )보다 앞선다.