스레드 트리
면접 대비시간 제한2초메모리 제한512 MB
각 게시물이 답글 대상 번호를 주어질 때, 게시물 메시지를 깊이만큼 점을 붙여 전위 순서로 출력한다.
문제
Nathan O. Davis는 JAG-channel이라는 전자 게시판 시스템을 운영하고 있다. 그는 이곳에 새 기능인 스레드 보기를 추가하느라 어려움을 겪고 있다.
다른 많은 게시판 시스템과 마찬가지로 JAG-channel은 스레드 기반이다. 여기서 스레드(토픽이라고도 한다)는 게시물 모음으로 이루어진 하나의 대화를 뜻한다. 각 게시물은 새 스레드를 시작하는 개시글이거나, 기존 스레드에 있는 이전 게시물에 대한 답글이다.
스레드 보기는 게시물 사이의 논리적 답글 구조를 반영하는 트리 형태의 보기이다. 각 게시물은 트리의 노드를 이루고, 그 답글들을 시간 순서대로(오래된 답글이 새 답글보다 앞선다) 자식 노드로 가진다. 게시물 하나와 그에 대한 직간접 답글 전체가 하나의 부분 트리를 이룬다.
예를 들어 보자. 한 사용자가 hoge라는 메시지로 개시글을 작성했다. 다른 사용자가 fuga로 답글을 달았다. 또 다른 사용자도 개시글에 piyo로 답글을 달았다. 누군가가 두 번째 게시물(fuga)에 foobar로 답글을 달았다. 다섯 번째 사용자는 같은 게시물에 jagjag로 답글을 달았다. 이 스레드의 트리는 다음과 같다.
hoge
├─fuga
│ ├─foobar
│ └─jagjag
└─piyo
Nathan은 구현을 쉽게 하려고 더 단순한 형식을 생각하고 있다. 개시글에서 각 게시물까지의 깊이를 점으로 나타내는 방식이다. 각 답글은 부모 게시물보다 점을 하나 더 가진다. 위 스레드의 트리는 다음과 같다.
hoge
.fuga
..foobar
..jagjag
.piyo
이 문제에서 여러분의 임무는 Nathan을 도와, 한 스레드에 주어진 게시물들을 Nathan의 형식으로 트리를 출력하는 프로그램을 작성하는 것이다.
입력
입력은 다음 형식의 데이터셋 하나로 이루어진다.
n
k1
M1
k2
M2
:
:
kn
Mn
첫째 줄에는 정수 n(1 ≤ n ≤ 1,000)이 주어지며, 이는 스레드에 있는 게시물의 수이다. 이어서 2n개의 줄이 주어진다. 각 게시물은 두 줄로 표현된다. 첫째 줄에는 정수 ki(k1 = 0, 2 ≤ i ≤ n일 때 1 ≤ ki < i)가 주어지며, i번째 게시물이 ki번째 게시물에 대한 답글임을 나타낸다. 둘째 줄에는 문자열 Mi가 주어지며, i번째 게시물의 메시지를 나타낸다. k1은 항상 0이며, 이는 첫 번째 게시물이 다른 어떤 게시물에도 답글을 달지 않았음, 즉 개시글임을 뜻한다.
각 메시지는 대문자, 소문자, 숫자로 이루어진 1자 이상 50자 이하의 문자열이다.
출력
주어진 n개의 메시지를 문제에서 설명한 형식에 맞게 출력한다.