도로망
시간 제한1초메모리 제한128 MB
방향 다중 그래프에 오일러 경로가 있는지 판정하고, 시작점이 될 수 있는 노드 수와 길이 S(최대 3)의 닫힌 보행 수를 각 노드별로 구해 정렬해 출력한다.
문제
어떤 도시의 도로망은 도로(street)와 교차점(node)으로 이루어져 있습니다. 하나의 교차점에서는 둘 이상의 도로가 만날 수 있습니다. 모든 도로는 일방통행입니다. 또한 두 교차점이 여러 개의 도로로 직접 연결될 수 있으며, 한 교차점에서 자기 자신으로 되돌아오는 도로(자기 루프)도 존재할 수 있습니다.
다음 세 가지 질문에 답하는 프로그램을 작성하세요.
- 어떤 교차점에서 출발하여 모든 도로를 정확히 한 번씩 지나는 경로가 존재하는가? (출발점으로 다시 돌아오든, 다른 교차점에서 끝나든 상관없습니다.)
- 위 조건을 만족하는 경로의 출발점이 될 수 있는 교차점의 개수는 몇 개인가?
- 각 교차점 에 대해, 에서 출발하여 다시 로 돌아오는 길이 의 경로는 몇 개인가? (도로나 교차점을 여러 번 지나도 됩니다.)
입력
첫째 줄에 교차점의 개수를 나타내는 양의 정수 ()이 주어집니다.
둘째 줄에 경로의 길이를 나타내는 양의 정수 ()가 주어집니다.
이어지는 개의 줄에는 도로망이 행렬 형태로 주어집니다. 번째 줄의 번째 값은 교차점 에서 교차점 로 향하는 도로의 개수입니다. 교차점의 번호는 부터 까지입니다.
출력
첫째 줄에는, 어떤 교차점에서 출발하여 모든 도로를 정확히 한 번씩 지나는 경로가 존재하면 문자열 YES를, 그렇지 않으면 문자열 NO를 출력합니다.
답이 YES인 경우에만 다음 두 줄을 추가로 출력합니다.
- 둘째 줄에는 그러한 경로의 출발점이 될 수 있는 교차점의 개수를 출력합니다.
- 셋째 줄에는 각 교차점에 대해 자기 자신으로 돌아오는 길이 의 경로의 개수를 구한 뒤, 이 개의 값을 오름차순으로 정렬하여 공백으로 구분해 출력합니다.
답이 NO인 경우에는 첫째 줄의 NO만 출력합니다.