도로망

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

어떤 도시의 도로망은 도로(street)와 교차점(node)으로 이루어져 있습니다. 하나의 교차점에서는 둘 이상의 도로가 만날 수 있습니다. 모든 도로는 일방통행입니다. 또한 두 교차점이 여러 개의 도로로 직접 연결될 수 있으며, 한 교차점에서 자기 자신으로 되돌아오는 도로(자기 루프)도 존재할 수 있습니다.

다음 세 가지 질문에 답하는 프로그램을 작성하세요.

  1. 어떤 교차점에서 출발하여 모든 도로를 정확히 한 번씩 지나는 경로가 존재하는가? (출발점으로 다시 돌아오든, 다른 교차점에서 끝나든 상관없습니다.)
  2. 위 조건을 만족하는 경로의 출발점이 될 수 있는 교차점의 개수는 몇 개인가?
  3. 각 교차점 $X$에 대해, $X$에서 출발하여 다시 $X$로 돌아오는 길이 $S$의 경로는 몇 개인가? (도로나 교차점을 여러 번 지나도 됩니다.)

입력

첫째 줄에 교차점의 개수를 나타내는 양의 정수 $N$ ($N \le 50$)이 주어집니다.

둘째 줄에 경로의 길이를 나타내는 양의 정수 $S$ ($S \le 3$)가 주어집니다.

이어지는 $N$개의 줄에는 도로망이 행렬 형태로 주어집니다. $I$번째 줄의 $J$번째 값은 교차점 $I$에서 교차점 $J$로 향하는 도로의 개수입니다. 교차점의 번호는 $1$부터 $N$까지입니다.

출력

첫째 줄에는, 어떤 교차점에서 출발하여 모든 도로를 정확히 한 번씩 지나는 경로가 존재하면 문자열 YES를, 그렇지 않으면 문자열 NO를 출력합니다.

답이 YES인 경우에만 다음 두 줄을 추가로 출력합니다.

  • 둘째 줄에는 그러한 경로의 출발점이 될 수 있는 교차점의 개수를 출력합니다.
  • 셋째 줄에는 각 교차점에 대해 자기 자신으로 돌아오는 길이 $S$의 경로의 개수를 구한 뒤, 이 $N$개의 값을 오름차순으로 정렬하여 공백으로 구분해 출력합니다.

답이 NO인 경우에는 첫째 줄의 NO만 출력합니다.