다시 전화해 주세요

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

문제

전화 회사가 남기는 통화 기록에는 통화 내용이 없다. 언제 시작해서 몇 분 동안 이어졌는지, 어느 번호가 어느 번호에게 걸었는지만 남는다. 이런 기록만 모아도 누가 누구와 연락하고 지내는지 관계망을 그릴 수 있다.

한 통화는 시작 시각부터 통화 시간만큼 이어지므로 시작 시각과 종료 시각 사이의 구간을 차지한다. 두 번호 AABB가 연결되어 있다는 것은, 길이가 24시간인 구간 하나를 잡아서 AABB에게 건 통화와 BBAA에게 건 통화가 모두 그 구간에 걸치게 만들 수 있다는 뜻이다. 한 시점에서 닿기만 해도 걸친 것으로 본다. 다시 말해 먼저 시작한 통화가 끝나고 24시간 안에 늦게 시작한 통화가 시작되면 두 번호는 연결되어 있다. 두 통화 구간이 서로 겹치는 경우도 여기에 들어간다.

예를 들어 1월 15일 오전 6시에 AABB에게 20분 동안 전화하고, 1월 16일 오전 6시 20분에 BBAA에게 1분 동안 전화했다면 두 번호는 연결되어 있다. 1월 15일 오전 6시 20분부터 1월 16일 오전 6시 20분까지의 24시간 구간이 두 통화에 모두 걸치기 때문이다. 두 통화를 모두 AA가 걸었다면 방향이 한쪽뿐이므로 연결이 아니다. BB가 1분 늦은 오전 6시 21분에 걸어 왔어도 연결이 아니다.

통화 기록 전체를 읽고 모든 연결을 찾아 출력하는 프로그램을 작성하시오.

입력

첫 줄에 데이터 세트의 개수 KK가 주어진다. 이어서 KK개의 데이터 세트가 다음 형식으로 주어진다.

각 데이터 세트의 첫 줄에는 통화 기록의 개수 nn이 주어진다 (0n1000000 \le n \le 100000). 다음 nn개 줄에는 통화 기록이 한 줄에 하나씩 주어진다.

yyyy/mm/dd hh:mm T <number1> <number2>

yyyy/mm/dd는 통화가 시작된 날짜이고, 필요하면 앞을 0으로 채운다. hh:mm은 시작 시각이며 시는 0부터 23까지의 값이다. T는 통화 시간을 분 단위로 나타낸 정수다. <number1>은 전화를 건 번호, <number2>는 받은 번호이며, 둘 다 다른 문자 없이 10자리 숫자로만 이루어진다. 한 기록의 두 번호는 서로 다르다.

통화 기록은 시작 날짜와 시각이 이른 순서로 주어지고, 시작 시각이 같은 기록이 여러 개일 수도 있다.

출력

각 데이터 세트마다 먼저 Data Set x:를 한 줄에 출력한다. x는 데이터 세트의 번호이고 1부터 센다. 그다음 그 데이터 세트의 통화 기록에 나온 모든 번호에 대해 한 줄씩 다음 형식으로 출력한다.

<number>: <conn1> <conn2> <conn3> ...

<number>는 번호 자신이고, 콜론 뒤에는 그 번호와 연결된 번호를 모두 나열한다. 줄은 <number>가 증가하는 순서로 정렬하고, 한 줄 안의 연결 목록도 번호가 증가하는 순서로 정렬한다. 콜론과 첫 번호 사이, 그리고 번호와 번호 사이는 공백 하나로 구분한다. 연결된 번호가 하나도 없으면 콜론까지만 출력한다.

각 데이터 세트를 출력한 뒤에 빈 줄을 하나 출력한다.