/*判断有无欧拉回路
还是老样子:
先判断图是否连通,这道题是无向图,然后判断每个点的度,最后打印之
*/
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 1005;
int G[maxn][maxn];
int degree[maxn];
int f[maxn];
int n;
int find(int x)
{
if(x != f[x])
{
f[x] = find(f[x]);
}
return f[x];
}
void euler(int u)
{
for(int v = 1;v <= 50;v++)
{
if(G[u][v])
{
G[u][v]--;
G[v][u]--;
euler(v);
printf("%d %d\n",v,u);
}
}
}
int main()
{
int T;
scanf("%d",&T);
for(int t = 1;t <= T;t++)
{
memset(G,0,sizeof(G));
memset(degree,0,sizeof(degree));
for(int i = 1;i <= 50;i++) f[i] = i;
scanf("%d",&n);
for(int i = 1;i <= n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
G[a][b]++;
G[b][a]++;
degree[a]++;
degree[b]++;
if( find(a) != find(b))
{
f[find(a)] = find(b);
}
}
int j;
bool ok = true;
for(j = 0;!degree[j];j++);
for(int i = j + 1;i < maxn;i++)
{
if(degree[i] && find(j) != find(i))
{
ok = false;
break;
}
}
printf("Case #%d\n",t);
if(ok)
{
for(int i = 1;i < maxn;i++)
{
if(degree[i]%2)
{
ok = false;
break;
}
}
if(ok)
{
for(j = 0;!degree[j];j++);
euler(j);
}
}
if(!ok) printf("some beads may be lost\n");
printf("\n");
}
return 0;
}