#include<bits/stdc++.h>
using namespace std;
map<string,int> cnt;
vector<string> p(10000);
int G[26][26];
bool vis[26];
int n,m;
void dfs(int u){
// if(vis[u]) return;
vis[u]=1;
for(int i=0;i<n;i++){
if(!vis[i]&&G[u][i]&&G[i][u])
{
cout<< ", "<<p[i];
dfs(i);
}
}
return ;
}
void init(){
memset(G,0,sizeof(G));
memset(vis,0,sizeof(vis));
cnt.clear();
p.clear();
}
void floyd(){
for(int k=0;k<n;k++)
for(int i=0;i<n;i++)
if(G[i][k])
for(int j=0;j<n;j++)
if(G[k][j]) G[i][j]=1;
//for(int i=0;i<n;i++){
//for(int j=0;j<n;j++) cout<<G[i][j]<<" ";
//printf("\n");
//
//}
}
int main()
{
int kase=0;
while(~scanf("%d%d",&n,&m)&&n&&m){
init();
string a,b;
int id=0;
while(m--){
cin>>a>>b;
if(!cnt.count(a)) { cnt[a]=id++; p.push_back(a); }
if(!cnt.count(b)) { cnt[b]=id++; p.push_back(b); }
G[ cnt[a] ][ cnt[b] ]=1;
}
// for(int i=0;i<n;i++){
//for(int j=0;j<n;j++) cout<<G[i][j]<<" ";
//printf("\n");
//
//}
if(kase>0) cout<<endl;
floyd();
cout<<"Calling circles for data set "<<++kase<<":"<<endl;
for(int i=0;i<n;i++){
if(!vis[i]){
cout<< p[i] ;
dfs(i);
cout<<endl;
}
}
}
return 0;
}