注意 端点相同的两条边可能重复出现、输出顺序!!
#include<stdio.h>
#include<string.h>
int gra[60][60];
int d[60];
int vis[60][60];
int uu[1010];
int vv[1010];
int top;
void dfs(int u)
{
int v;
for(v = 1; v < 60;v++)
{
if(gra[u][v])
{
gra[u][v] --;
gra[v][u] --;
dfs(v);
//printf("%d %d\n",v,u);
uu[top] = u;
vv[top++] = v;
}
}
}
int main()
{
//
freopen("input.txt","r",stdin);
//
//freopen("out.txt","w",stdout);
int t;
scanf("%d",&t);
int tt = 1;
while(t--)
{
int n;
top = 0;
scanf("%d",&n);
memset(gra,0,sizeof(gra));
memset(d,0,sizeof(d));
memset(vis,0,sizeof(vis));
memset(uu,0,sizeof(uu));
memset(vv,0,sizeof(vv));
for(int i = 0; i < n;i++)
{
int u,v;
scanf("%d%d",&u,&v);
gra[u][v] ++;
gra[v][u] ++;
d[u]++;
d[v]++;
}
int cnt = 0;
for(int i = 1;i < 60;i++)
{
if(d[i]%2)
{
cnt++;
}
}
printf("Case #%d\n",tt++);
if(cnt)
{
puts("some beads may be lost");
}
else
{
for(int i = 1;i < 60;i++)
{
if(d[i])
{
dfs(i);
break;
}
}
top--;
while(top>=0)
{
printf("%d %d\n",uu[top],vv[top]);
top--;
}
}
if(t) putchar('\n');
}
}