#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int n,k,vis[25],ans[25],x;
vector<int> a[25];
void dfs(int now,int u){
ans[now]=u;
if(u==k){
x++;
for(int i=1;i<=now;i++){
cout<<ans[i]<<" ";
}
cout<<"\n";
ans[now]=0;
return;
}
for(int i=0;i<a[u].size();i++){
if(!vis[a[u][i]]){
vis[a[u][i]]=1;
dfs(now+1,a[u][i]);
vis[a[u][i]]=0;
}
}
ans[now]=0;
}
int main(){
int t=0;
while(cin>>k){
t++;
x=0;
for(int i=1;i<=20;i++){
a[i].clear();
}
int u,v;
while(1){
cin>>u>>v;
if(u==0&&v==0)break;
a[u].push_back(v);
a[v].push_back(u);
n=max(max(u,v),n);
}
for(int i=1;i<=n;i++){
sort(a[i].begin(),a[i].end());
}
printf("CASE %d:\n",t);
vis[1]=1;
dfs(1,1);
printf("There are %d routes from the firestation to streetcorner %d.\n",x,k);
}
return 0;
}
vector存图,DFS