K번째 좋은 문자열

괄호 문자열 S가 주어질 때, S의 부분 수열이면서 good string인 서로 다른 문자열을 사전순으로 나열해 K번째를 출력한다.

어려움8동적 계획법문자열조합론아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

좋은 문자열은 다음과 같이 정의한다.

  • 문자열 ()는 좋은 문자열이다.
  • SS가 좋은 문자열이면 (SS...S)도 좋은 문자열이다. 즉, 같은 좋은 문자열 하나를 한 번 이상 이어 붙인 뒤 전체를 괄호로 감싼 문자열은 좋은 문자열이다.
  • 위의 두 경우를 제외하면 좋은 문자열은 없다.

문자열 XX의 부분 수열은 XX에서 문자를 0개 이상 지워서 얻은 문자열이다.

문자열 SS가 주어진다. SS의 각 문자는 ( 또는 )이다.

SS의 부분 수열 중 좋은 문자열인 것을 서로 다른 것만 모은 집합을 GG라고 하자. GG는 집합이므로 같은 좋은 문자열이 부분 수열로 여러 번 나타나도 GG에는 하나만 들어 있다. 예를 들어 SS = (()())이면 GG에는 (), (()), (()())가 들어 있다.

KK가 주어졌을 때 GG에 들어 있는 문자열 중 사전 순으로 KK번째인 문자열을 구하는 프로그램을 작성하시오. 순서는 1부터 센다. 사전 순으로 비교할 때 ()보다 앞선다.

입력

첫째 줄에 문자열 SS가 주어진다. SS의 길이는 1 이상 150 이하이다.

둘째 줄에 정수 KK가 주어진다. (1K1091 \le K \le 10^9)

출력

첫째 줄에 GG에 들어 있는 문자열 중 사전 순으로 KK번째 문자열을 출력한다. 그런 문자열이 없으면 -1을 출력한다.