바이트랜드 대학교(BU)의 컴퓨터과학 과정은 n개의 단계(level)로 이루어져 있다. 각 단계는 한 학기에 해당하지만, 단계의 개수는 일반적인 컴퓨터과학 과정의 학기 수보다 많을 수도 적을 수도 있다.
학생은 학업 도중 학장에게 여러 종류의 신청서를 제출할 수 있다. 하나의 신청서는 학생을 현재 단계에서 다른 단계로 이동시키며, 동시에 예산에 영향을 준다. 이 영향은 이득(장학금 등, 양수)일 수도 있고 손해(추가 수강료 등, 음수)일 수도 있다.
바이트맨은 게으르지만 매우 영리한 BU 학생이다. 그는 빠른 졸업에는 관심이 없고 오직 수입을 최대로 만드는 데에만 관심이 있다. 학장은 결정론적으로 행동한다. 즉, 같은 신청서에 대한 결과(이동하는 단계와 발생하는 비용)는 항상 동일하다. 바이트맨은 같은 신청서를 원하는 만큼 여러 번 제출할 수 있다.
어떤 단계 v가 무한한 수입을 보장한다는 것은 다음을 뜻한다: 학생이 단계 v에서 시작하여 신청서들을 차례로 제출한 뒤 다시 처음의 단계 v로 돌아오되, 그 과정에서 발생한 비용의 총합을 양수로 만들 수 있다. 이런 닫힌 과정을 반복하면 수입을 얼마든지 늘릴 수 있다.
모든 신청서의 정보가 주어질 때, 무한한 수입으로 이어질 수 있는 시작 단계를 모두 구하는 프로그램을 작성하라.
첫째 줄에 두 정수 n과 m이 공백으로 구분되어 주어진다 (2≤n≤300, 1≤m≤n(n−1)). n은 단계의 개수, m은 분석할 신청서의 개수이다.
이어지는 m개의 줄에는 각 신청서가 세 정수 ai, bi, ci로 주어진다 (1≤ai,bi≤n, ai=bi, −109≤ci≤109). 이는 학생이 단계 ai에서 신청서를 제출하면 학장의 처리 후 단계 bi로 이동하고, 그때 비용 ci가 발생함을 뜻한다(양수는 이득, 음수는 손해).
같은 순서쌍 (ai,bi)는 두 번 이상 나타나지 않지만, (ai,bi)와 (bi,ai)가 함께 나타날 수는 있다.
첫째 줄에 무한한 수입을 얻을 수 있는 시작 단계의 개수 k를 출력한다. 둘째 줄에는 그러한 단계 번호들을 1 이상 n 이하의 범위에서 증가하는 순서로 공백으로 구분하여 출력한다. k가 0이면 둘째 줄은 빈 줄로 둔다.
