JAG-channel
면접 대비시간 제한8초메모리 제한512 MB
각 줄이 점으로 들여쓴 게시물이다. 점을 칸으로 바꾸고 게시물 바로 앞 점은 '+', 부모와 자손 사이의 점은 '|'로 다시 그린다.
문제
네이선 O. 데이비스는 JAG-channel이라는 전자 게시판을 운영한다. 그는 현재 스레드 뷰라는 새 기능을 추가하는 작업을 하고 있다.
대부분의 전자 게시판과 마찬가지로 JAG-channel은 스레드 기반이다. 스레드란 하나의 대화를 이루는 게시물의 묶음을 말한다. 게시물에는 다음 두 종류가 있다.
- 새 스레드를 만드는 첫 게시물
- 이미 있는 스레드의 이전 게시물에 대한 답글
스레드 뷰는 게시물 사이의 답글 관계로 이루어진 논리적 구조를 나타내는 트리 형태의 뷰다. 각 게시물은 트리의 노드가 되고, 그 게시물에 달린 답글이 자식 노드가 된다. 어떤 게시물에 대한 직간접 답글이 전체적으로 하나의 부분 트리를 이룬다는 점에 주의하자.
예를 들어, "hoge"라는 첫 게시물에 "fuga"와 "piyo"라는 답글 두 개가 달리고, "fuga"에 다시 "foobar"와 "jagjag"이라는 답글이 달리고, "jagjag"에 "zigzag"라는 답글이 달렸다고 하자. 이 스레드의 트리는 다음과 같다.
hoge
├─fuga
│ ├─foobar
│ └─jagjag
│ └─zigzag
└─piyo
네이선 O. 데이비스는 프로그래머를 고용해 기능을 구현하게 했지만, 그 프로그래머는 마지막 단계에서 사라져 버렸다. 프로그래머는 스레드의 트리를 만들고 그것을 간이 형식으로 표시하는 부분까지 완성해 두었다. 이 간이 형식에서 답글의 깊이는 '.'(반각 마침표)로 나타내고, 어떤 게시물에 대한 답글은 원래 게시물보다 '.'가 하나 더 왼쪽에 붙는다. 또한 어떤 게시물에 대한 답글은 반드시 원래 게시물보다 아래에 온다. 답글을 단 게시물과 답글 사이에는 답글을 단 게시물에 대한 다른 답글(그리고 그에 대한 직간접 답글)이 나타날 수 있지만, 그 외의 게시물이 둘 사이에 나타나지는 않는다. 위 트리의 간이 형식 표시는 다음과 같다.
hoge
.fuga
..foobar
..jagjag
...zigzag
.piyo
당신이 할 일은 이 간이 형식 표시를 받아 보기 좋게 정리하는 것이다. 즉,
- 각 게시물 바로 왼쪽의 '
.'(각 게시물 왼쪽에 붙은 '.' 중 가장 오른쪽 것)을 '+'(반각 플러스), - 같은 게시물에 대한 직접 답글마다 각각의 바로 왼쪽에 있는 '
+' 사이에 위치하는 '.'을 '|'(반각 세로줄), - 나머지 '
.'은 ''(반각 공백)
으로 바꾸면 된다.
위 간이 형식 표시를 정리한 결과는 다음과 같다.
hoge
+fuga
|+foobar
|+jagjag
| +zigzag
+piyo
입력
입력은 여러 데이터 세트로 구성된다. 각 데이터 세트의 형식은 다음과 같다.
...
은 간이 형식 표시의 줄 수를 나타내는 정수이며, 1 이상 1,000 이하라고 가정해도 좋다. 이어지는 개의 줄에는 스레드 트리의 간이 형식 표시가 적혀 있다. 는 간이 형식 표시의 번째 줄을 나타내며, 여러 개의 '.'과 그 뒤에 이어지는 1자 이상 50자 이하의 알파벳 소문자로 이루어진 문자열로 구성된다. 은 스레드의 첫 게시물이며 '.'을 포함하지 않는다. , ..., 은 그 스레드의 답글이며 반드시 1개 이상의 '.'을 포함한다.
은 입력의 끝을 나타낸다. 이는 데이터 세트에 포함하지 않는다.
출력
각 데이터 세트에 대한 정리된 표시를 줄씩 출력하라.