이진 트리 아스키 아트

접두사 형태로 주어진 이진 트리마다 슬래시, 세로 막대, 간격 규칙에 따라 ASCII 그림을 그려 문자 격자를 출력한다.

보통7트리재귀시뮬레이션구현아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

아스키 아트는 문자만으로 그림을 그리는 표현 방식이다. 이 문제에서는 이진 트리를 아스키 아트로 그린다.

각 노드에는 알파벳 대문자 한 글자가 붙어 있다. 노드는 첫 번째 부분 트리와 두 번째 부분 트리를 각각 최대 하나씩 가지며, 둘 중 한쪽만 있어도 된다.

아래 그림에서 왼쪽은 노드가 여섯 개인 트리이고, 오른쪽은 같은 트리를 아스키 아트로 그린 결과이다. 루트는 A이다. E는 첫 번째 부분 트리가 없고 두 번째 부분 트리만 있어서, 이 트리는 균형 잡혀 있지 않다.

그림에서 노드는 자기 글자로 나타내고, 간선은 슬래시 문자 하나로 나타낸다. 첫 번째 부분 트리는 부모보다 위에, 두 번째 부분 트리는 부모보다 아래에 그린다. 부분 트리가 부모 바로 위나 바로 아래 공간에 들어가지 못하면, 노드 글자의 바로 위나 바로 아래에 세로 막대를 이어 붙여 연결선을 늘린다.

그림을 그리는 규칙은 다음과 같다. 행은 위에서 아래로 0번부터 세고, 열은 왼쪽에서 오른쪽으로 0번부터 센다.

  • 루트는 0번 열에 놓는다. 깊이가 dd인 노드는 2d2d번 열에 놓는다.
  • 노드는 저마다 자기 행을 하나씩 차지하고, 두 노드가 같은 행에 놓이지 않는다.
  • 어떤 노드가 rrcc열에 있고 첫 번째 부분 트리가 있다고 하자. 그 부분 트리의 그림에서 부분 트리의 루트보다 아래에 놓인 행의 개수를 bb라 하면, 부분 트리의 루트는 rgr-gc+2c+2열에 놓인다. 여기서 g=max(2, b+1)g=\max(2,\ b+1)이다. rg+1r-g+1c+1c+1열에 /를 놓고, rg+2r-g+2행부터 r1r-1행까지 cc열에 |를 놓는다.
  • 어떤 노드가 rrcc열에 있고 두 번째 부분 트리가 있다고 하자. 그 부분 트리의 그림에서 부분 트리의 루트보다 위에 놓인 행의 개수를 aa라 하면, 부분 트리의 루트는 r+hr+hc+2c+2열에 놓인다. 여기서 h=max(2, a+1)h=\max(2,\ a+1)이다. r+h1r+h-1c+1c+1열에 \를 놓고, r+1r+1행부터 r+h2r+h-2행까지 cc열에 |를 놓는다.

즉 부분 트리는 부모에게서 두 행 이상 떨어뜨리되, 그 조건을 지키는 선에서 부모에게 최대한 붙여 그린다. 이 규칙을 따르면 두 문자가 같은 칸에 놓이는 일은 없다.

입력

첫 줄에 트리의 개수 TT가 주어진다. (1T1001 \le T \le 100)

다음 TT개의 줄에 트리가 하나씩 전위 순회 형식으로 주어진다. 한 노드는 자기 글자를 먼저 적고, 이어서 첫 번째 부분 트리, 그다음 두 번째 부분 트리를 적는다. 모든 노드는 부분 트리를 두 개 적으며, 빈 부분 트리는 @ 한 글자로 적는다. 위 그림의 트리는 ABC@@D@@E@F@@로 적는다.

각 트리를 나타내는 문자열의 길이는 100자 이하이다. 노드의 글자는 알파벳 대문자이고, 같은 글자가 여러 번 나올 수 있으며 사전 순으로 정렬되어 있지 않다. 모든 트리에는 노드가 하나 이상 있다.

출력

트리마다 먼저 Graph와 트리의 번호를 공백 하나로 띄어 출력한다. 번호는 1부터 센다. 그다음 줄부터 위 규칙대로 그린 아스키 아트를 출력한다.

각 줄 끝에는 공백을 남기지 않는다. 트리와 트리 사이에는 빈 줄을 하나 출력한다.