올바른 괄호 문자열 찾기

시간 제한1초메모리 제한1024 MB

요약
두 단계 문제로, 처음 N개 괄호를 읽고 20비트 정수 w를 넘긴 뒤, 뒤 N개 괄호와 w만으로 S+S의 길이 2N 올바른 괄호 부분 문자열을 출력한다.
난이도

어려움10점 중 8점

유형
문자열, 그리디, 구현, 조합론
정답자
아직 제출이 없습니다

문제

이 문제는 투 스텝 문제입니다.

( NN개와 ) NN개로 이루어진 길이 2N2N의 괄호 문자열 SS에 대해, SS를 연속으로 22개 이어붙인 길이 4N4N의 문자열 TT에서 길이 2N2N의 올바른 괄호 부분 문자열을 찾아라.

하지만 이 문제는 투 스텝 문제이기 때문에 당신은 두 단계에 걸쳐 문자열 SS의 앞 절반과 뒤 절반을 따로 보아야 한다.

첫 번째 단계에서 당신은 SS에서 첫 번째 괄호부터 NN번째 괄호까지 NN개의 괄호를 본 뒤, 0≤w≤220−10\le w\le 2^{20}-1를 만족하는 정수 ww를 두 번째 단계로 전달할 수 있다. ww 이외의 정보는 전달할 수 없다.

두 번째 단계에서 당신은 SS에서 앞에서부터 N+1N+1번째 괄호부터 2N2N번째 괄호까지 NN개의 괄호를 본 뒤, 첫 번째 단계에서 당신이 전달한 정수 ww를 토대로 TT의 길이 2N2N의 올바른 괄호 문자열들 중 하나를 찾아야 한다.

입력

당신의 프로그램은 채점 데이터 하나당 총 두 번 실행된다. 당신은 하나의 소스 코드에 두 단계의 실행 과정을 모두 구현해야 한다.

모든 입력의 첫 줄에는 실행 단계를 나타내는 정수 tt가 주어진다. (1≤t≤21 \leq t \leq 2)

만약 tt가 11이라면 첫 번째 단계를 수행해야 하고, tt가 22라면 두 번째 단계를 수행해야 한다.

예제2

  1. 예제 1

    입력
    1
    3
    ())
    
    예상 출력
    251013
    
  2. 예제 2

    입력
    2
    3 251013
    (()
    
    예상 출력
    4