题目描述
如果你最近看过电视里面关于长途电话的广告,你会注意到,很多公司努力以最低的成本提供最好的服务。一家公司提供了一项服务叫“呼叫圈”:你需要提供一个最常呼叫的联系人列表,如果你在“呼叫圈”内呼叫某人,获得的通话折扣比呼叫“呼叫圈”外的人大很多。只有“呼叫圈”内的联系人通话才有大的折扣,如果需要更改最常呼叫联系人,需要将联系人添加到呼叫圈子里面。
LibertyBell Phone Co.是一家新公司,认为他们有可以让其他公司破产的通话计划,这个公司也有呼叫圈子业务,但他们会帮你找出你的呼叫圈子,这是它的工作原理。 LibertyBell会跟踪所有电话,除了您自己之外,您的呼叫圈子还包括您打电话的所有人,以及直接或间接打电话给您的人。
比如,如果Ben打电话给Alexander,Alexander打电话给Dolly,而Dolly打电话给Ben,那么他们都在同一个圈子里。 如果Dolly也打电话给Benedict,Benedict打电话给Dolly,那么Benedict与Dolly,Ben,Alexander就在同一个大圈子里,最后如果Alexander打电话给Aaron,但Aaron没有打给Alexander、Ben、Dolly或Benedict,那么Aaron就不在圈子里。
LibertyBell公司给出了通话记录,请你来帮助编写程序来识别相应的呼叫圈子。
输入格式
输入包含多组测试数据。
对于每组测试数据:
第一行,用空格隔开的两个整数n和m,分别表示这组测试数据中通话记录的涉及到的人数,n≤25。m表示接下来有m行通话记录。
接下来m行,每行代表一个通话记录,包含两个人名,人名是由字母组成的字符串,大小写敏感,字符串长度不超过25个字母。比如,如果Ben打电话给Dolly,则用"Ben Dolly"表示。
当输入为“0 0”时,表示输入结束。
输出格式
对于每组测试数据,第一行先输出“Calling circles for data set X:”,其中X表示测试数据的编号。
接下来分别输出这组测试数据中的呼叫圈子,每个呼叫圈子输出一行,输出呼叫圈中的人名,用逗号空格(逗号后面一个空格)隔开。
注意:输出的顺序按照如下要求:
1、每个呼叫圈的人名的输出按照字典序排序输出
2、呼叫圈的的输出排序按照呼叫圈的首个人名的字典序排序
样例数据
input
5 6
Ben Alexander
Alexander Dolly
Dolly Ben
Dolly Benedict
Benedict Dolly
Alexander Aaron
14 34
John Aaron
Aaron Benedict
Betsy John
Betsy Ringo
Ringo Dolly
Benedict Paul
John Betsy
John Aaron
Benedict George
Dolly Ringo
Paul Martha
George Ben
Alexander George
Betsy Ringo
Alexander Stephen
Martha Stephen
Benedict Alexander
Stephen Paul
Betsy Ringo
Quincy Martha
Ben Patrick
Betsy Ringo
Patrick Stephen
Paul Alexander
Patrick Ben
Stephen Quincy
Ringo Betsy
Betsy Benedict
Betsy Benedict
Betsy Benedict
Betsy Benedict
Betsy Benedict
Betsy Benedict
Quincy Martha
0 0
output
Calling circles for data set 1:
Aaron
Alexander, Ben, Benedict, Dolly
Calling circles for data set 2:
Aaron
Alexander, Ben, George, Martha, Patrick, Paul, Quincy, Stephen
Benedict
Betsy, Dolly, John, Ringo