2013年7月30日 星期二

1229 - Sub-dictionary

在這個問題中,"dictionary" 字典定義為根據字典順序排序的單字,且每個單字有其相關連的定義,每個單字必然會使用其他單自來解釋,所以當字典定義 N 個單字時,則確切只會出現 N 個單字在字典中,當然不存在單字用來定義自己本身。


"sub-dictionary" 收集字典一部分的單字,當然也會符合上述的條件,而有門計算語言的課程指派一個作業,找到語言最基礎的單字量,並且把它建立成一部字典。 藉此可以推論理解出新的單字。


要讓機器自動學習相當困難,所以我們決定先教他幾個簡單常用的單字,一開始近似於 "sub-dictionary",而藉由這些單字,機器將會拓展知識,逐步地理解新的單字,直到整個字典的單字都被理解。

例如要理解單字 "xyz" 前,必須理解所有它定義內的所有單字。

寫程式找到一個最小的 "sub-dictionary"。


Input 

輸入有多組測資。

每組測資第一行 有一個整數 n (1 <= n <= 100),接下來會有 n 行,每行的第一個單字為字典內的單字,接下來會有數個單字表示定義該單字用的詞。

每個英文單字長度不超過 25,且每個單字的定義所需單字不超過 30 個。
而保證一開始給定的字典會符合上的描述。

Output 

對於每組測資,輸出最小字典的大小,接著按照字典順序輸出 sub-dictionary 內的單字。

Sample Input 

5 
aue oizer piqoi oizer 
doy oizer hweqlo hweqlo 
hweqlo piqoi aue 
oizer piqoi 
piqoi aue aue 
0

Sample Output 

3 
aue oizer piqoi