//兴高采烈的敲完了回溯代码,哈哈哈!!!
//什么?我不相信,我明明回溯了,为什么会超时呢?为什么,提交了两次都超时了
//果然还是做了无用功!!其实重要的原因还是把不能到达目的地的点也递归了!!!其实只要先初始化一下,从后面开始标志可以到达目的地的点,然后在开始递归就可以了
#include <stdio.h>
#include <string.h>
int a[30][30],b[30];
int n,m,num,vis[30],can[30];
void init(int x)
{
int i;
for(i=2;i<=m;i++)
if(a[x][i]&&!can[i])
{
can[i]=1;
init(i);
}
}
void dfs(int x,int cur)
{
int i;
if(x==n)
{
for(i=0;i<cur;i++)
{
if(i!=0)printf(" ");
printf("%d",b[i]);
}
printf("\n");
num++;
return ;
}
for(i=2;i<=m;i++)
if(a[x][i]&&!vis[i]&&can[i])
{
vis[i]=1;
b[cur]=i;
dfs(i,cur+1);
vis[i]=0;
}
}
main()
{
int u,v,count=1;
//freopen("D:\\o.txt","r",stdin);
while(scanf("%d",&n)!=EOF)
{
memset(a,0,sizeof(a));
memset(vis,0,sizeof(vis));
memset(can,0,sizeof(can));
while(1)
{
scanf("%d%d",&u,&v);
if(u==0&&v==0)break;
if(u>m)m=u;
if(v>m)m=v;
a[u][v]=a[v][u]=1;
}
printf("CASE %d:\n",count++);
b[0]=1;
num=0;
init(n);
dfs(1,1);
printf("There are %d routes from the firestation to streetcorner %d.\n",num,n);
}
return 0;
}