//Bridges in a Graphs
#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
#include<stack>
#include<utility>
#include<cstdlib>
#include<algorithm>
using namespace std;
#define MAX 205
int parent[MAX],timer=0,low[MAX],disc[MAX];
bool vis[MAX];
vector<pair<int,int> >st;
vector<vector<int> >G(MAX);
bool cmp(const pair<int,int> a,pair<int,int> b)
{
if(a.first==a.second)
return a.second<b.second;
else
return a.first<b.first;
}
void reset()
{
st.clear();
memset(parent,-1,sizeof parent);
memset(vis,false,sizeof vis);
for(int i=0;i<=MAX;i++)
G[i].clear();
}
void dfs(int u)
{
vis[u]=true;
disc[u]=low[u]=timer++;
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];
if(!vis[v])
{
parent[v]=u;
dfs(v);
low[u]=min(low[u],low[v]);
if(low[v]>low[u])
st.push_back(make_pair(min(u,v),max(u,v)));
}
else if(v!=parent[u])
low[u]=min(low[u],disc[v]);
}
}
int main()
{
int n,t=0;
while(cin>>n)
{
reset();
if(t>0)
cout<<endl;
if(n==0)
{
cout<<"0"<<" critical links\n";break;
}
int node,count;
for(int j=0;j<n;j++)
{
scanf("%d (%d)",&node,&count);
for(int i=0;i<count;i++)
{
int x;
scanf("%d",&x);
G[node].push_back(x);
G[x].push_back(node);
}
}
for(int i=0;i<n;i++)
{
if(!vis[i])
dfs(i);
}
sort(st.begin(),st.end(),cmp);
cout<<st.size()<<" critical links\n";
for(int i=0;i<st.size();i++)
cout<<st[i].first<<" - "<<st[i].second<<endl;
t++;
}
}
Ly9CcmlkZ2VzIGluIGEgR3JhcGhzCiNpbmNsdWRlPGNzdGRpbz4KI2luY2x1ZGU8Y3N0cmluZz4KI2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8c3RhY2s+CiNpbmNsdWRlPHV0aWxpdHk+CiNpbmNsdWRlPGNzdGRsaWI+CiNpbmNsdWRlPGFsZ29yaXRobT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBNQVggMjA1CmludCBwYXJlbnRbTUFYXSx0aW1lcj0wLGxvd1tNQVhdLGRpc2NbTUFYXTsKYm9vbCB2aXNbTUFYXTsKdmVjdG9yPHBhaXI8aW50LGludD4gPnN0Owp2ZWN0b3I8dmVjdG9yPGludD4gPkcoTUFYKTsKYm9vbCBjbXAoY29uc3QgcGFpcjxpbnQsaW50PiBhLHBhaXI8aW50LGludD4gYikKewoJaWYoYS5maXJzdD09YS5zZWNvbmQpCglyZXR1cm4gYS5zZWNvbmQ8Yi5zZWNvbmQ7CgllbHNlCglyZXR1cm4gYS5maXJzdDxiLmZpcnN0Owp9CnZvaWQgcmVzZXQoKQp7CglzdC5jbGVhcigpOwoJbWVtc2V0KHBhcmVudCwtMSxzaXplb2YgcGFyZW50KTsKCW1lbXNldCh2aXMsZmFsc2Usc2l6ZW9mIHZpcyk7Cglmb3IoaW50IGk9MDtpPD1NQVg7aSsrKQoJR1tpXS5jbGVhcigpOwp9CnZvaWQgZGZzKGludCB1KQp7CQoJdmlzW3VdPXRydWU7CglkaXNjW3VdPWxvd1t1XT10aW1lcisrOwoJZm9yKGludCBpPTA7aTxHW3VdLnNpemUoKTtpKyspCgl7CgkJaW50IHY9R1t1XVtpXTsKCQlpZighdmlzW3ZdKQoJCXsKCQkJcGFyZW50W3ZdPXU7CgkJCWRmcyh2KTsKCQkJbG93W3VdPW1pbihsb3dbdV0sbG93W3ZdKTsKCQkJaWYobG93W3ZdPmxvd1t1XSkKCQkJc3QucHVzaF9iYWNrKG1ha2VfcGFpcihtaW4odSx2KSxtYXgodSx2KSkpOwoJCX0KCQllbHNlIGlmKHYhPXBhcmVudFt1XSkKCQkJbG93W3VdPW1pbihsb3dbdV0sZGlzY1t2XSk7Cgl9Cn0KaW50IG1haW4oKQp7CglpbnQgbix0PTA7CgkKCXdoaWxlKGNpbj4+bikKCXsKCQlyZXNldCgpOwoJCWlmKHQ+MCkKCQljb3V0PDxlbmRsOwoJCWlmKG49PTApCgkJewoJCQljb3V0PDwiMCI8PCIgY3JpdGljYWwgbGlua3NcbiI7YnJlYWs7CgkJfQoJCWludCBub2RlLGNvdW50OwoJCQoJCWZvcihpbnQgaj0wO2o8bjtqKyspCgkJewoJCQlzY2FuZigiJWQgKCVkKSIsJm5vZGUsJmNvdW50KTsKCQkJZm9yKGludCBpPTA7aTxjb3VudDtpKyspCgkJCXsKCQkJCWludCB4OwoJCQkJc2NhbmYoIiVkIiwmeCk7CgkJCQlHW25vZGVdLnB1c2hfYmFjayh4KTsKCQkJCUdbeF0ucHVzaF9iYWNrKG5vZGUpOwoJCQl9CgkJfQoJCWZvcihpbnQgaT0wO2k8bjtpKyspCgkJewoJCQlpZighdmlzW2ldKQoJCQlkZnMoaSk7CgkJfQoJCXNvcnQoc3QuYmVnaW4oKSxzdC5lbmQoKSxjbXApOwoJCWNvdXQ8PHN0LnNpemUoKTw8IiBjcml0aWNhbCBsaW5rc1xuIjsKCQkKCQlmb3IoaW50IGk9MDtpPHN0LnNpemUoKTtpKyspCgkJY291dDw8c3RbaV0uZmlyc3Q8PCIgLSAiPDxzdFtpXS5zZWNvbmQ8PGVuZGw7CgkJdCsrOwoJCQoJfQp9