그래프는 정점(vertex)과 간선(edge)으로 이루어진다. 두 정점 사이에 경로가 존재하면 그 두 정점은 서로 연결되어 있다고 한다. 연결 요소(connected component)는 그 안의 모든 정점이 서로 연결되어 있는 정점들의 부분집합이며, 하나의 그래프는 하나 이상의 연결 요소로 이루어진다.
트리(tree)는 사이클(cycle)이 없는 연결 요소이다. 트리는 여러 성질을 가진다. 예를 들어 정점이 $n$개인 트리는 간선이 정확히 $n-1$개이며, 임의의 두 정점 사이의 경로가 유일하다.
그래프가 주어졌을 때, 그 그래프에 들어 있는 트리의 개수를 세는 프로그램을 작성하시오. 정점 하나로만 이루어진 연결 요소도 간선이 $0$개여서 사이클이 없으므로 트리로 센다.
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫째 줄에는 정점의 개수 $n$과 간선의 개수 $m$이 주어지며, $n \le 500$, $m \le n(n-1)/2$을 만족한다. 이어지는 $m$개의 줄에는 각 간선을 나타내는 두 정수가 주어진다. 같은 간선이 두 번 이상 주어지는 경우는 없다. 정점은 $1$번부터 $n$번까지 번호가 매겨져 있다. 입력의 마지막 줄에는 $0$이 두 개 주어진다.
각 테스트 케이스마다 결과를 한 줄씩 출력한다. 그래프에 트리가 하나도 없으면 No trees., 정확히 한 개 있으면 There is one tree., $T$개($T > 1$)이면 A forest of T trees.(여기서 T는 트리의 개수)를 출력한다. 각 줄은 Case X: 로 시작하며, $X$는 $1$부터 시작하는 테스트 케이스 번호이다.