가장 짧은 올바른 괄호 문자열

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

올바른 괄호 문자열(regular brackets sequence)을 다음과 같이 정의한다.

  1. 빈 문자열은 올바른 괄호 문자열이다.
  2. 문자열 SS가 올바른 괄호 문자열이면 (S)(S)[S][S]도 올바른 괄호 문자열이다.
  3. 문자열 AABB가 모두 올바른 괄호 문자열이면 두 문자열을 이어 붙인 ABAB도 올바른 괄호 문자열이다.

예를 들어 다음 문자열은 모두 올바른 괄호 문자열이다.

(), [], (()), ([]), ()[], ()[()]

반면 다음 문자열은 모두 올바른 괄호 문자열이 아니다.

(, [, ), )(, ([)], ([(]

(, ), [, ] 네 종류의 문자로 이루어진 문자열이 주어진다. 이 문자열을 부분 수열로 포함하는 가장 짧은 올바른 괄호 문자열을 찾고, 그 길이를 구하여라.

여기서 문자열 a1a2ana_1 a_2 \dots a_n이 문자열 b1b2bmb_1 b_2 \dots b_m의 부분 수열이라는 것은, 1i1<i2<<inm1 \le i_1 < i_2 < \dots < i_n \le m을 만족하는 인덱스가 존재하여 모든 1jn1 \le j \le n에 대해 aj=bija_j = b_{i_j}가 성립함을 뜻한다.

입력

첫째 줄에 (, ), [, ]로만 이루어진 문자열이 주어진다. 문자열의 길이는 최대 100100이며 다른 문자는 포함되지 않는다. 빈 문자열(빈 줄)이 주어질 수도 있으며, 이는 빈 수열을 의미한다.

출력

주어진 문자열을 부분 수열로 포함하는 올바른 괄호 문자열 중 가장 짧은 것의 길이를 정수 하나로 출력한다.