THE iDEM@STER

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

문제

한별이는 문자 P@만을 사용하는 프로그래밍 언어를 만들었다.

한별이의 언어에서 올바른 프로그램을 이루는 문자열의 규칙은 다음과 같다.

  • 모든 문자는 P@ 중 하나여야 하며, 같은 문자가 44번 이상 연속해서 등장하면 안 된다.
  • 문자열에서 모든 PPP(로 바꾸고, @@@)로 바꾼 다음, 남아있는 P@을 지우면 올바른 괄호열이 되어야 한다.

이때 올바른 괄호열이란 다음과 같이 정의된다.

  • 빈 문자열은 올바른 괄호열이다.
  • XX가 올바른 괄호열이면, XX를 괄호로 감싼 (XX)도 올바른 괄호열이다.
  • XXYY가 올바른 괄호열이면, XXYY를 이어 붙인 XYXY도 올바른 괄호열이다.
  • 모든 올바른 괄호열은 위 세 가지 규칙을 통해서만 만들어진다.

한별이의 언어는 프로그램을 실행하기 전에, 카운터 변수 CC의 값을 00으로 초기화하고, 프로그램에 대해 전처리로 다음과 같은 과정을 순서대로 거친다.

  • 프로그램의 모든 PPP(로 바꾼다.
  • 프로그램의 모든 @@@)로 바꾼다.
  • 프로그램에 남아있는 모든 P+로 바꾼다.
  • 프로그램에 남아있는 모든 @-로 바꾼다.

예를 들어, 프로그램이 PPP@PP@PP@@@라고 하면, 전처리를 거친 후에는 (-++-++)이 된다.

전처리한 프로그램을 실행할 때, +CC11 증가시키고, -11 감소시킨다. 한편, ()는 반복문으로, () 사이의 코드를 33 번 반복해서 실행한다.

이를 의사코드로 표현하면 다음과 같다. 이때 문자열 SS에 대해 S\[i]S\[i]ii 번째 문자를, S\[i..j]S\[i..j]는 문자열 SS에서 ii 번째 문자부터 jj 번째 문자까지(경계 포함)의 부분 문자열을 의미한다.

Algorithm run(전처리한 프로그램 SS)

  • ii11로 설정한다.

  • while ii \leq SS의 길이

    • if S\[i]S\[i]+

      • CC11 증가시킨다.
      • ii11 증가시킨다.
    • else if S\[i]S\[i]-

      • CC11 감소시킨다.
      • ii11 증가시킨다.
    • else if S\[i]S\[i](

      • jjS\[i]S\[i]와 짝이 맞는 )의 인덱스로 설정한다.
      • run(A\[i+1..j1]A\[i+1..j-1])을 33 회 실행한다.
      • iij+1j+1로 설정한다.

정수 NN이 주어졌을 때, 프로그램 실행 후 CC의 값이 NN인 길이가 가장 짧은 올바른 프로그램 중에서, 사전 순으로 가장 빠른 프로그램을 출력하라. (@P보다 사전 순으로 앞선다.)

입력

첫째 줄에 테스트케이스의 개수 TT가 주어진다. (1T10,0001 \leq T \leq 10\\,000)

각 테스트케이스마다 한 줄에 정수 NN이 주어진다. (1N10181 \leq |N| \leq 10^{18})

출력

각 줄마다 각 테스트케이스에 대해 프로그램 실행 후 CC의 값이 NN인 길이가 가장 짧은 올바른 프로그램 중 사전 순으로 가장 빠른 프로그램을 출력하라.