N명이 서로 한 번씩 겨룬 토너먼트 결과가 주어질 때, 1번 선수에서 시작하는 가장 긴 단순 경로를 찾고 사전순으로 가장 앞선 경로를 출력한다.
보통6그래프DFS백트래킹완전 탐색아직 제출이 없습니다시간 제한1초메모리 제한256 MB고려대학교 중앙 배드민턴 동아리 KUBC가 정회원을 대상으로 리그를 열었다. 태양이를 포함해 N명이 참가했고, 모든 참가자가 서로 한 번씩 맞붙어 총 N(N−1)/2번의 경기를 치렀다. 무승부 없이 모든 경기의 승패가 갈렸고, 그 결과로 순위표가 나왔다.

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