문제
(와 )만으로 이루어진 두 문자열
하나의 입력 데이터에서
참고
올바른 괄호열의 정의
올바른 괄호열이란 다음과 같이 정의된다.
한 쌍의 괄호로만 이루어진 문자열
()는 올바른 괄호열이다.
X 가 올바른 괄호열이면,X 를 괄호로 감싼(X )도 올바른 괄호열이다.
X 와Y 가 올바른 괄호열이면,X 와Y 를 이어 붙인XY 도 올바른 괄호열이다.모든 올바른 괄호열은 위 세 가지 규칙을 통해서만 만들어진다.
예를 들어
(()(()))나(())()()는 올바른 괄호열이지만,(()나)((()()은 모두 올바른 괄호열이 아니다.
부분문자열의 정의
길이가
l 인 문자열s 와1 ≤ i ≤ j ≤ l 인 두 정수i 와j 에 대해,s[i..j] 는s 의i 번째 문자에서부터j 번째 문자까지를 모두 순서대로 포함하는 문자열이며, 이러한 문자열들을 문자열s 의 부분문자열이라고 한다.예를 들어
s 가()(()()이라면,s[3..5] 는(()이고,s[4..7] 은()()이다. 따라서(()과()()은 문자열()(()()의 부분문자열이다. 하지만)()(은 문자열()(()()의 부분문자열이 아니다.
사전 순의 정의
길이가
l_1 인 문자열s1[1 .. l_1] 이 길이가l_2 인 문자열s_2[1 .. l_2] 보다 사전 순으로 앞선다는 것은, 아래 두 조건 중 하나가 성립한다는 것과 동치이다.
s_1 이s_2 의 접두사이다. 즉,l_1 < l_2 이고, 모든1 \le i \le l_1 에 대해s_1[i] = s_2[i] 이다.
s_1[i] \ne s_2[i] 가 성립하는 가장 작은i(1 \le i \le min(l_1,l_2)) 에 대해s_1[i] \le s_2[i] 이다.이 문제에서 여는 괄호
(는 닫는 괄호)보다 사전에서 앞선 문자이다. 즉‘(’ < ‘)’ 이다.이 방식은 C++, Java, Python에서 두 문자열을 비교하는 방식과 동일하다.
입력
첫째 줄에 테스트 케이스의 개수
다음
제약 조건
1 \le T \le 500\,000 A 와B 는 각각 여는 괄호와 닫는 괄호로만 이루어진 길이가1 이상인 문자열이다.1 \le K \le 10^{18} \sum |A| \le 500\,000 \sum|B| \le 500\,000
출력
각각의 테스트 케이스마다, 주어진 순서대로, 한 개의 줄에,
S(A, B) 의 크기가K 미만이라면,-1 을 출력한다.S(A, B) 의 크기가K 이상이라면,S(A, B) 에서 사전 순K 번째 문자열을 출력한다.
부분문제
| 번호 | 점수 | 조건 |
|---|---|---|
| #1 | 4점 | |
| #2 | 11점 | |
| #3 | 16점 | |
| #4 | 25점 | |
| #5 | 12점 | |
| #6 | 12점 | |
| #7 | 9점 | |
| #8 | 13점 | 추가 제약 조건 없음. |
예제
3
()((())) (()((())))() 3
))(()(((( )())))))( 1
())) )))))(()) 4
()
()
-1