N명의 선수 사이 승패를 나타낸 토너먼트 그래프가 주어질 때, 1번 선수에서 시작하는 가장 긴 경로 중 사전순으로 가장 앞선 경로를 구한다.
보통7그래프그리디동적 계획법구현아직 제출이 없습니다시간 제한1초메모리 제한256 MB고려대학교 중앙 배드민턴 동아리 KUBC가 정회원 리그를 열었다. 태양이를 포함한 N명이 참가해 서로 한 번씩 겨뤘고, 경기 수는 모두 N(N−1)/2번이다. 무승부 없이 모든 경기의 승패가 갈려서 순위표가 나왔다.
다음은 5명이 참가한 리그의 승패표와 순위표다.

순위표를 본 현수는 절규했다. "내가 공동 꼴찌라고? 꼴찌라니... 아니, 내가 꼴찌라니! 이게 무슨 소리야! 아핡핡핡" 이윽고 현수는 자기합리화를 시작했다. "내가 한용이를 이겼고, 한용이는 세찬이를 이겼고, 세찬이는 찬우를 이겼고, 찬우는 태양이를 이겼고... 그러니 내가 나머지 전부를 이긴 셈이네!"
현수와 함께 공동 꼴찌인 태양이도 같은 식으로 자기합리화를 하고 싶지만, 나머지 4명을 모두 엮는 방법이 떠오르지 않는다. 태양이를 도와 꼬리를 무는 선수 나열을 만드는 프로그램을 작성하여라.
첫째 줄에 정회원 수 N이 주어진다. (2≤N≤2000)
둘째 줄부터 N개의 줄에 승패표가 주어진다. p+1번째 줄의 q번째 수는 아래 규칙을 따른다.
무승부가 없으므로 p=q이면 (p,q) 자리와 (q,p) 자리의 두 수 중 정확히 하나가 1이다. 태양이는 1번 선수다.
첫째 줄에 꼬리를 무는 선수 나열의 최대 길이 L을 출력한다.
둘째 줄에 그 나열 S1 S2 … SL을 공백으로 구분해 출력한다. 나열은 아래 조건을 모두 만족해야 한다.
길이가 L인 나열이 여럿이면 사전순으로 가장 앞서는 나열을 출력한다.