괄호 문자열 표기법 (Large)
시간 제한3초메모리 제한1024 MB
2 이상 10억 이하의 자연수 N이 주어질 때, 값이 N인 가장 짧은 괄호 문자열을 찾고 길이가 같으면 사전순으로 가장 앞선 것을 출력합니다.
문제
괄호 문자열은 다음 3개의 조건만으로 만들 수 있는 문자열이다.
- 빈 문자열은 괄호 문자열이다.
- 괄호 문자열 에 대해
()는 괄호 문자열이다. - 두 괄호 문자열 , 에 대해 는 괄호 문자열이다.
괄호 문자열의 예시로는 (())(), (((()())())()), ((()())()()())(()) 등이 있다.
괄호 문자열이 나타내는 값은 다음과 같이 정한다.
- 빈 문자열이 나타내는 값은 1이다.
- 괄호 문자열 가 나타내는 값이 일 때,
()가 나타내는 값은 이다. - 두 괄호 문자열 , 가 나타내는 값이 각각 , 일 때, 가 나타내는 값은 이다.
예를 들어 (())()는 6을 나타낸다.
()는 를 나타낸다.(())는 을 나타낸다.(())()는 을 나타낸다.
자연수 이 주어지면 을 나타내는 가장 짧은 괄호 문자열을 구해보자. 단, 그러한 문자열이 여러 개 있으면 사전 순으로 가장 앞서는 것을 구한다.
입력
첫째 줄에 테스트 케이스의 개수 가 주어진다 ().
둘째 줄부터 각 테스트 케이스마다 한 줄에 자연수 이 하나씩 주어진다 ().
출력
각 테스트 케이스마다 을 나타내는 가장 짧은 괄호 문자열을 한 줄에 하나씩 출력한다. 그러한 문자열이 여러 개 있으면 사전 순으로 가장 앞서는 것을 출력한다.