필리스는 여러 나라에 지사를 둔 대기업에서 일한다. 부서를 옮겨 다니며 직원들의 일상 업무에 숨어 있는 중복을 찾아내 없애는 것이 필리스의 일이고, 실력도 아주 좋다.
이번에 맡은 부서에서는 다음과 같은 지휘 계통도를 받았다. D는 B에게, C에게, A에게 보고서를 보내고, B는 A에게, C는 A에게 보고서를 보낸다.
부서원은 상사에게 보고서를 올릴 때 이 계통도를 그대로 따르고, 화살표 하나마다 보고서를 한 부씩 보낸다. 필리스는 여기서 곧바로 중복을 찾아냈다. D가 B에게 보고서를 보내고 B가 다시 A에게 보고서를 보내므로, D가 A에게 직접 보고서를 보낼 필요는 없다. D가 쓴 내용은 B가 A에게 보내는 보고서에 이미 요약되어 들어간다. 그래서 D에서 A로 가는 연결은 지울 수 있다. 여기에 C에서 B로 가는 연결까지 있었다면 D에서 B로 가는 연결과 C에서 A로 가는 연결도 지울 수 있다.
정확히 말하면, 연결 s1→s2는 원래 계통도에 s1에서 출발해 다른 사람을 한 명 이상 거쳐 s2에 닿는 경로가 있을 때 지울 수 있다. 지울 수 있는지는 언제나 원래 계통도로 판단하고, 연결을 하나 지운 뒤 남은 계통도로 다시 판단하지 않는다.
계통도가 주어지면 지울 수 있는 연결을 모두 찾는 프로그램을 작성하시오.
입력은 여러 개의 테스트 케이스로 이루어진다.
각 테스트 케이스의 첫 줄에 계통도에 있는 연결의 개수를 나타내는 양의 정수 m이 주어진다. 이어지는 m개의 줄에는 각각 두 문자열 s1 s2가 공백으로 구분되어 주어지며, 직원 s1에서 그의 상사 s2로 가는 연결이 있다는 뜻이다.
한 테스트 케이스에 등장하는 직원은 200명 이하이고, 같은 연결이 두 번 주어지지 않는다.
0 하나만 있는 줄이 나오면 입력이 끝난다.
테스트 케이스마다 한 줄씩 출력한다. 줄의 맨 앞에 Case x: 를 출력하고(x는 1부터 세는 테스트 케이스 번호), 이어서 지울 수 있는 연결의 개수를 출력한 다음, 지울 연결을 사전순으로 늘어놓는다. 개수와 각 연결 사이는 공백 하나로 구분한다.
연결 s1→s2는 문자열 s1,s2로 나타낸다. 사전순은 이 문자열을 한 글자씩 아스키 코드 값으로 비교한 순서이므로 대문자가 소문자보다 앞선다. 지울 수 있는 연결이 없으면 개수 0만 출력하고 줄을 끝낸다.