#include <iostream>
#include <map>
#include <string>
#include <cstring>
#define INF 1000000000
using namespace std;
int gr[30][30];
map<string,int> mp;
map<int,string> np;
int visit[30];
int main()
{
int n,m,c=0;
int kase = 1;
string s1,s2;
while(cin>>n)
{
cin>>m;
if(n+m==0)
break;
for(int i=0;i<26;i++)
{
for(int j=0;j<26;j++)
{
if(i==j)
gr[i][j]=0;
else
{
gr[i][j]=INF;
}
}
}
mp.clear();
np.clear();
int K=1;
for(int i=0;i<m;i++)
{
cin>>s1>>s2;
if(mp[s1]==0)
{
mp[s1]=K;
np[K]=s1;
K++;
}
if(mp[s2]==0)
{
mp[s2]=K;
np[K]=s2;
K++;
}
gr[mp[s1]][mp[s2]]=1;
//gr[mp[s2]][mp[s1]]=1;
}
for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(gr[i][k]!=INF && gr[k][j]!=INF)
gr[i][j]=1;
}
}
}
if(c)
cout<<"\n";
c=1;
cout<<"Calling circles for data set "<<kase++<<":\n";
memset(visit,false,sizeof(visit));
int total =n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(gr[i][j]==INF)
gr[j][i]=INF;
}
}
for(int i=1;i<=n;i++)
{
bool first=true;
for(int j=1;j<=n;j++)
{
if(gr[i][j]!=INF)
{
if(visit[j]==0)
{
if(first)
{
cout<<np[j];
first =false;
}
else
{
cout<<", "<<np[j];
}
visit[j]=1;
}
}
}
if(!first)
cout<<"\n";
}
}
return 0;
}