감염된 컴퓨터
면접 대비시간 제한8초메모리 제한512 MB
컴퓨터 사이에 오간 패킷의 전송 시각이 주어질 때, 컴퓨터 1에서 시작해 감염된 컴퓨터가 보낸 패킷을 받은 컴퓨터로 감염이 번질 때 감염되는 컴퓨터 수를 센다.
문제
Adam Ivan은 Soy Group, Inc.에서 시스템 관리자로 일한다. 지금 큰 문제에 직면해 있다. 그가 관리하는 여러 컴퓨터가 컴퓨터 바이러스에 감염된 것이다. 안타깝게도 회사의 백신 시스템은 이 바이러스가 매우 새로운 종류였기 때문에 탐지에 실패했다.
Adam은 바이러스에 처음 감염된 컴퓨터를 알아냈고, 네트워크 내에서 전송된 모든 데이터 패킷의 기록을 수집했다. 그는 이제 어떤 컴퓨터가 감염되었는지 알아내려 한다. 컴퓨터는 감염된 컴퓨터로부터 데이터 패킷을 하나라도 받으면 감염된다. 반면, 감염된 컴퓨터에 데이터 패킷을 보내는 것만으로는 감염되지 않는다.
패킷 기록의 크기가 상당히 크기 때문에 모든 감염된 컴퓨터를 손으로 나열하는 것은 거의 불가능해 보인다. 그래서 그는 당신에게 도움을 요청한다. 감염된 컴퓨터를 알아낼 수 있는 프로그램을 작성하라.
입력
입력은 여러 데이터셋으로 이루어진다. 각 데이터셋의 형식은 다음과 같다.
N M
t1 s1 d1
t2 s2 d2
...
tM sM dM
N은 컴퓨터의 수, M은 데이터 패킷의 수이다. ti (1 ≤ i ≤ M)는 i번째 데이터 패킷이 전송된 시각이고, si와 di (1 ≤ i ≤ M)는 각각 i번째 데이터 패킷의 출발 컴퓨터와 도착 컴퓨터이다. 처음 감염된 컴퓨터는 번호 1로 표시되고, 나머지 컴퓨터는 2부터 N 사이의 서로 다른 번호로 표시된다.
입력은 다음 조건을 만족한다. 0 < N ≤ 20000, 0 ≤ M ≤ 20000, 1 ≤ i ≤ N인 각 i에 대해 0 ≤ ti ≤ 10^9이다. 모든 ti는 서로 다르고, 각 패킷의 출발 컴퓨터와 도착 컴퓨터는 항상 다르다.
마지막 데이터셋 뒤에는 두 개의 0이 있는 줄이 온다. 이 줄은 어떤 데이터셋의 일부도 아니며 처리해서는 안 된다.
출력
각 데이터셋마다 컴퓨터 바이러스에 감염된 컴퓨터의 수를 출력한다.