버스 시간표
시간 제한1초메모리 제한128 MB
여러 노선과 반복 운행 정보를 바탕으로 출발 시간 순으로 정렬된 버스 시간표를 정류장별로 정확히 정렬해 출력합니다.
문제
버스 시간표는 보통 왼쪽에 정류장 번호가 세로로 있고, 오른쪽에는 각 운행편을 나타내는 열들이 있다. 각 운행편 열의 머리글에는 그 운행편의 노선 번호가 적힌다. 정류장과 운행편이 만나는 칸은 비어 있거나, 그 운행편이 그 정류장을 떠나는 시간이 들어간다.
여러 시나리오의 노선과 운행 정보가 주어질 때, 각 시나리오에 맞는 버스 시간표를 출력하는 프로그램을 작성하라.
입력
입력은 여러 시나리오로 이루어진다. 각 시나리오는 제목 한 줄로 시작하고, 이어서 그 시나리오에 포함된 각 노선의 정보가 한 줄씩 주어진다. 전체 입력은 # 한 줄로 끝난다.
노선 정보 한 줄은 첫 운행편이 차고지를 떠나는 시각의 시와 분, 그리고 운행 간격(분)으로 시작한다. 그 뒤에는 이동 시간과 도착 정류장 번호를 나타내는 정수 쌍들이 이어진다. 한 시나리오의 노선 목록은 0 0 한 줄로 끝난다.
노선은 입력된 순서대로 1번부터 번호가 매겨지고, 정류장도 1번부터 번호가 매겨진다. 버스는 되돌아오는 차고지를 제외하면 정류장을 항상 번호가 증가하는 순서로 방문한다. 차고지는 정류장 0으로 취급되므로 각 노선 정보의 마지막 정류장 번호는 항상 0이다. 한 시나리오에는 노선이 10개를 넘지 않고, 정류장은 99개를 넘지 않는다. 어떤 버스도 6:00 전에 출발하지 않으며, 생성되는 모든 운행편은 자정까지 차고지로 돌아와야 한다. 이 조건을 어기는 운행편은 출력하지 않는다.
출력
각 시나리오마다 시간표 하나를 출력한다. 시간표의 첫 줄에는 시나리오 제목을 그대로 출력한다. 다음 줄은 운행편 머리글이며, 차고지 출발 시각이 빠른 순서대로 정렬된 각 운행편의 노선 번호를 적는다. 그 다음에는 입력에 등장한 정류장 번호마다 한 줄씩 출력한다.
각 정류장 줄은 두 칸 너비의 정류장 번호로 시작한다. 각 운행편 칸은 여섯 칸 너비이며, 첫 문자는 |이다. 해당 운행편이 그 정류장에 서지 않으면 뒤의 다섯 칸은 공백이다. 서는 경우에는 뒤의 다섯 칸에 24시간제 hh:mm 형식의 출발 시각을 출력하며, 한 자리 수 시각과 분에는 앞에 0을 붙인다. 각 줄의 끝에도 |를 출력한다. 한 운행편 안에서는 아래로 내려갈수록 시간이 증가하지만, 같은 행에서 왼쪽에서 오른쪽으로는 반드시 증가하지 않을 수 있다. 시나리오 사이에는 빈 줄 하나를 둔다.