만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

괄호 짝 맞추기

시간 제한2초메모리 제한512 MB

요약
소문자 문자열 S가 주어질 때, S에 맞는 괄호열 중 사전순으로 가장 앞선 것을 구하고 없으면 -1을 출력한다.
난이도

보통10점 중 7점

유형
스택, 그리디, 문자열
정답자
아직 제출이 없습니다

문제

올바른 괄호 문자열을 다음과 같이 정의한다.

  • 빈 문자열은 올바른 괄호 문자열이다.
  • BB가 올바른 괄호 문자열이면 (B)(B)도 올바른 괄호 문자열이다.
  • LL과 RR가 모두 올바른 괄호 문자열이면 둘을 이어 붙인 LRLR도 올바른 괄호 문자열이다.

길이가 NN인 올바른 괄호 문자열 BB의 ii번째 문자를 BiB_i라고 하자. 두 인덱스 ii와 jj (1≤i<j≤N1 \le i < j \le N)가 다음 두 조건을 모두 만족하면 BiB_i와 BjB_j는 서로 짝이다.

  • BiB_i는 ( 이고 BjB_j는 ) 이다.
  • j=i+1j = i + 1이거나, 부분 문자열 Bi+1Bi+2…Bj−1B_{i+1} B_{i+2} \dots B_{j-1}이 올바른 괄호 문자열이다.

소문자로 이루어진 문자열 SS의 ii번째 문자를 SiS_i라고 하자. 올바른 괄호 문자열 BB가 SS에 대응한다는 것은 다음 두 조건이 성립한다는 뜻이다.

  • BB의 길이는 SS의 길이와 같다.
  • i<ji < j인 모든 인덱스 쌍에서 BiB_i와 BjB_j가 짝이면 Si=SjS_i = S_j이다.

소문자 NN개로 이루어진 문자열 SS가 주어진다. SS에 대응하는 올바른 괄호 문자열 중 사전순으로 가장 앞서는 것을 구한다.

입력

첫째 줄에 소문자 NN개로 이루어진 문자열 SS가 주어진다.

  • 2≤N≤1000002 \le N \le 100000
  • 괄호 문자열 AA가 괄호 문자열 BB보다 사전순으로 앞선다는 것은, 어떤 인덱스 ii (1≤i≤N1 \le i \le N)가 있어서 j<ij < i인 모든 jj에 대해 Aj=BjA_j = B_j이고 Ai<BiA_i < B_i인 경우를 말한다.
  • 문자 (는 문자 )보다 사전순으로 앞선다.

출력

첫째 줄에 SS에 대응하는 올바른 괄호 문자열 중 사전순으로 가장 앞서는 문자열을 출력한다. 그런 문자열이 없으면 -1을 출력한다.

예제8

  1. 예제 1

    입력
    abbaaa
    
    예상 출력
    (()())
    
  2. 예제 2

    입력
    abab
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    aa
    
    예상 출력
    ()
    
  4. 예제 4

    입력
    ab
    
    예상 출력
    -1
    
  5. 예제 5

    입력
    aaaa
    
    예상 출력
    (())
    
  6. 예제 6

    입력
    aabb
    
    예상 출력
    ()()
    
  7. 예제 7

    입력
    aabbaa
    
    예상 출력
    ((()))
    
  8. 예제 8

    입력
    aabbaabb
    
    예상 출력
    ((()))()