이 문제에서 사전(dictionary) 은 알파벳 오름차순으로 정렬된 여러 단어와, 각 단어의 뜻(정의)을 담고 있다. 모든 정의는 같은 사전 안에 있는 단어들만으로 쓰여 있다. 사전이 $N$개의 단어를 정의한다면, 정의에 쓰이는 단어까지 모두 포함해도 서로 다른 단어는 정확히 $N$개뿐이다. 또한 어떤 단어도 자기 자신의 정의에는 등장하지 않는다.
Sub-dictionary(부분 사전) 는 원래 사전의 단어들 중 일부만 골라 만든 사전으로, 그 자체로도 완전한 사전이어야 한다. 즉 sub-dictionary 안의 어떤 단어의 정의에 등장하는 모든 단어는 반드시 그 sub-dictionary 안에도 정의되어 있어야 하며, 그래야 sub-dictionary 하나만으로 독립된 사전이 된다.
컴퓨터에게 언어를 가르치는 프로젝트가 진행 중이다. 먼저 사전을 입력해 단어를 가르치고, 그 단어들만으로 만든 문장을 입력하면 컴퓨터가 문장의 뜻을 해석해 원하는 동작을 수행한다.
컴퓨터가 단어를 스스로 익히게 하려고, 먼저 어떤 sub-dictionary에 속한 단어들을 사람이 직접 가르쳐 이해시킨다. 그다음부터는 컴퓨터가 스스로 학습한다. 어떤 단어의 정의에 쓰인 단어를 컴퓨터가 모두 알고 있으면 그 단어도 새로 배울 수 있고, 새로 배운 단어는 또 다른 단어를 배우는 데 쓰인다. 예를 들어 컴퓨터가 단어 "xyz"를 이해하려면 "xyz"의 정의에 쓰인 다른 모든 단어를 이미 알고 있어야 한다.
사람이 직접 가르쳐야 하는 단어의 수가 가장 적도록, 즉 컴퓨터가 사전의 모든 단어를 스스로 학습할 수 있게 하는 가장 작은 sub-dictionary 를 구하는 프로그램을 작성하시오.
입력은 여러 개의 테스트 케이스로 이루어진다.
각 테스트 케이스의 첫 줄에는 사전에 정의된 단어의 개수 $n$이 주어진다. ($1 \le n \le 100$)
이어지는 $n$개의 줄에는 각 단어의 정의가 한 줄에 하나씩 주어진다. 각 줄의 첫 번째 단어가 정의되는 단어이고, 같은 줄의 나머지 단어들이 그 정의에 쓰인 단어들이다. 즉 첫 번째 단어를 이해하려면 나머지 단어들을 모두 알아야 한다. 한 단어의 정의에는 최대 $30$개의 단어가 쓰인다.
모든 단어는 공백으로 구분되며, 영소문자로만 이루어지고 길이는 $25$글자 미만이다.
입력의 끝은 $n = 0$인 줄로 표시되며, 이 줄은 처리하지 않는다.
각 테스트 케이스마다 두 줄을 출력한다. 첫 줄에는 조건을 만족하는 가장 작은 sub-dictionary에 속한 단어의 개수를 출력하고, 둘째 줄에는 그 단어들을 알파벳 오름차순으로 공백으로 구분해 출력한다. 가장 작은 sub-dictionary가 공집합이면 둘째 줄은 빈 줄로 출력한다.