#include <bits/stdc++.h>
#define ll long long
#define all(a) (a).begin(), (a).end()
#define dbg_line(x) cout << (x) << '\n'
#define dbg(x) cout << x << " "
using namespace std;
// <--> Report constants <-->
typedef pair<int, int> pii;
const int max_n = 1e5 + 5;
const ll inf = 1e9;
const ll m_inf = -1e9;
const ll mod = 1e9 + 7;
// <--> Report variables <-->
unordered_map<string, int> NametoNum;
unordered_map<int, string> NumtoName;
vector<int> adj[30];
int n, m, cnt, timer = 0;
int low[max_n], disc[max_n];
stack<int> st;
vector<vector<string>> res;
bool visited[max_n];
// <--> Main Code is Here <-->
void setIO(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
}
void call_file(){
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
}
void tarjan(int u){
visited[u] = true;
low[u] = disc[u] = timer++;
st.push(u);
for (int v : adj[u]){
if (!visited[v]){
tarjan(v);
low[u] = min(low[u], low[v]);
}
else{
low[u] = min(low[u], disc[v]);
}
}
if (low[u] == disc[u]){
vector<string> tmp;
while(st.top() != u){
tmp.push_back(NumtoName[st.top()]);
st.pop();
}
tmp.push_back(NumtoName[st.top()]);
st.pop();
res.push_back(tmp);
}
}
int main(){
setIO();
call_file();
int setID = 0;
while(cin >> n >> m){
if ((n + m) == 0){
break;
}
NametoNum.clear();
NumtoName.clear();
res.clear();
timer = 0;
cnt = 0;
for (int i = 0; i < 30; i++){
adj[i].clear();
}
memset(disc, 0, sizeof(disc));
memset(low, 0, sizeof(low));
memset(visited, false, sizeof(visited));
while(!st.empty()){
st.pop();
}
for (int i = 0; i < m; i++){
string caller, receiver;
cin >> caller >> receiver;
if (NametoNum.find(caller) == NametoNum.end()){
NametoNum[caller] = cnt;
NumtoName[cnt] = caller;
cnt++;
}
if (NametoNum.find(receiver) == NametoNum.end()){
NametoNum[receiver] = cnt;
NumtoName[cnt] = receiver;
cnt++;
}
int u = NametoNum[caller], v = NametoNum[receiver];
adj[u].push_back(v);
}
cout << "Calling circles for data set " << ++setID << ":" << '\n';
for (int j = 0; j < n; j++){
if (!visited[j]){
tarjan(j);
}
}
for (auto scc : res){
for (int k = 0; k < scc.size(); k++){
cout << scc[k];
if (k != scc.size() - 1) cout << ", ";
}
cout << '\n';
}
cout << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgYWxsKGEpIChhKS5iZWdpbigpLCAoYSkuZW5kKCkKI2RlZmluZSBkYmdfbGluZSh4KSBjb3V0IDw8ICh4KSA8PCAnXG4nCiNkZWZpbmUgZGJnKHgpIGNvdXQgPDwgeCA8PCAiICIKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyA8LS0+IFJlcG9ydCBjb25zdGFudHMgPC0tPgoKdHlwZWRlZiBwYWlyPGludCwgaW50PiBwaWk7CmNvbnN0IGludCBtYXhfbiA9IDFlNSArIDU7CmNvbnN0IGxsIGluZiA9IDFlOTsKY29uc3QgbGwgbV9pbmYgPSAtMWU5Owpjb25zdCBsbCBtb2QgPSAxZTkgKyA3OwoKLy8gPC0tPiBSZXBvcnQgdmFyaWFibGVzIDwtLT4KCnVub3JkZXJlZF9tYXA8c3RyaW5nLCBpbnQ+IE5hbWV0b051bTsKdW5vcmRlcmVkX21hcDxpbnQsIHN0cmluZz4gTnVtdG9OYW1lOwp2ZWN0b3I8aW50PiBhZGpbMzBdOwppbnQgbiwgbSwgY250LCB0aW1lciA9IDA7CmludCBsb3dbbWF4X25dLCBkaXNjW21heF9uXTsKc3RhY2s8aW50PiBzdDsKdmVjdG9yPHZlY3RvcjxzdHJpbmc+PiByZXM7CmJvb2wgdmlzaXRlZFttYXhfbl07CgovLyA8LS0+IE1haW4gQ29kZSBpcyBIZXJlIDwtLT4KCnZvaWQgc2V0SU8oKXsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKICAgIGNvdXQudGllKE5VTEwpOwp9Cgp2b2lkIGNhbGxfZmlsZSgpewogICAgZnJlb3BlbigiaW5wdXQudHh0IiwiciIsc3RkaW4pOwogICAgZnJlb3Blbigib3V0cHV0LnR4dCIsInciLHN0ZG91dCk7Cn0KCnZvaWQgdGFyamFuKGludCB1KXsKICAgIHZpc2l0ZWRbdV0gPSB0cnVlOwogICAgbG93W3VdID0gZGlzY1t1XSA9IHRpbWVyKys7CiAgICBzdC5wdXNoKHUpOwogICAgZm9yIChpbnQgdiA6IGFkalt1XSl7CiAgICAgICAgaWYgKCF2aXNpdGVkW3ZdKXsKICAgICAgICAgICAgdGFyamFuKHYpOwogICAgICAgICAgICBsb3dbdV0gPSBtaW4obG93W3VdLCBsb3dbdl0pOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBsb3dbdV0gPSBtaW4obG93W3VdLCBkaXNjW3ZdKTsKICAgICAgICB9CiAgICB9CiAgICBpZiAobG93W3VdID09IGRpc2NbdV0pewogICAgICAgIHZlY3RvcjxzdHJpbmc+IHRtcDsKICAgICAgICB3aGlsZShzdC50b3AoKSAhPSB1KXsKICAgICAgICAgICAgdG1wLnB1c2hfYmFjayhOdW10b05hbWVbc3QudG9wKCldKTsKICAgICAgICAgICAgc3QucG9wKCk7CiAgICAgICAgfQogICAgICAgIHRtcC5wdXNoX2JhY2soTnVtdG9OYW1lW3N0LnRvcCgpXSk7CiAgICAgICAgc3QucG9wKCk7CiAgICAgICAgcmVzLnB1c2hfYmFjayh0bXApOwogICAgfQp9CgppbnQgbWFpbigpewogICAgc2V0SU8oKTsKICAgIGNhbGxfZmlsZSgpOwogICAgaW50IHNldElEID0gMDsKICAgIHdoaWxlKGNpbiA+PiBuID4+IG0pewogICAgICAgIGlmICgobiArIG0pID09IDApewogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgTmFtZXRvTnVtLmNsZWFyKCk7CiAgICAgICAgTnVtdG9OYW1lLmNsZWFyKCk7CiAgICAgICAgcmVzLmNsZWFyKCk7CiAgICAgICAgdGltZXIgPSAwOwogICAgICAgIGNudCA9IDA7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzMDsgaSsrKXsKICAgICAgICAgICAgYWRqW2ldLmNsZWFyKCk7CiAgICAgICAgfQogICAgICAgIG1lbXNldChkaXNjLCAwLCBzaXplb2YoZGlzYykpOwogICAgICAgIG1lbXNldChsb3csIDAsIHNpemVvZihsb3cpKTsKICAgICAgICBtZW1zZXQodmlzaXRlZCwgZmFsc2UsIHNpemVvZih2aXNpdGVkKSk7CiAgICAgICAgd2hpbGUoIXN0LmVtcHR5KCkpewogICAgICAgICAgICBzdC5wb3AoKTsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyBpKyspewogICAgICAgICAgICBzdHJpbmcgY2FsbGVyLCByZWNlaXZlcjsKICAgICAgICAgICAgY2luID4+IGNhbGxlciA+PiByZWNlaXZlcjsKICAgICAgICAgICAgaWYgKE5hbWV0b051bS5maW5kKGNhbGxlcikgPT0gTmFtZXRvTnVtLmVuZCgpKXsKICAgICAgICAgICAgICAgIE5hbWV0b051bVtjYWxsZXJdID0gY250OwogICAgICAgICAgICAgICAgTnVtdG9OYW1lW2NudF0gPSBjYWxsZXI7CiAgICAgICAgICAgICAgICBjbnQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoTmFtZXRvTnVtLmZpbmQocmVjZWl2ZXIpID09IE5hbWV0b051bS5lbmQoKSl7CiAgICAgICAgICAgICAgICBOYW1ldG9OdW1bcmVjZWl2ZXJdID0gY250OwogICAgICAgICAgICAgICAgTnVtdG9OYW1lW2NudF0gPSByZWNlaXZlcjsKICAgICAgICAgICAgICAgIGNudCsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGludCB1ID0gTmFtZXRvTnVtW2NhbGxlcl0sIHYgPSBOYW1ldG9OdW1bcmVjZWl2ZXJdOwogICAgICAgICAgICBhZGpbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8ICJDYWxsaW5nIGNpcmNsZXMgZm9yIGRhdGEgc2V0ICIgPDwgKytzZXRJRCA8PCAiOiIgPDwgJ1xuJzsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG47IGorKyl7CiAgICAgICAgICAgIGlmICghdmlzaXRlZFtqXSl7CiAgICAgICAgICAgICAgICB0YXJqYW4oaik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yIChhdXRvIHNjYyA6IHJlcyl7CiAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgc2NjLnNpemUoKTsgaysrKXsKICAgICAgICAgICAgICAgIGNvdXQgPDwgc2NjW2tdOwogICAgICAgICAgICAgICAgaWYgKGsgIT0gc2NjLnNpemUoKSAtIDEpIGNvdXQgPDwgIiwgIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb3V0IDw8ICdcbic7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgJ1xuJzsKICAgIH0KfQo=