#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int bin[100010];
int vis[100010];
int deg[100010];
int flag;
int findx(int x)
{
int r=x;
while(bin[r]!=r) r=bin[r];
return r;
}
void merge(int x,int y)
{
int fx;
int fy;
fx=findx(x);
fy=findx(y);
if(fx!=fy){
bin[fy]=fx;
}
else flag=0;
}
int main()
{
int a,b,k=0;
while(scanf("%d%d",&a,&b)==2)
{
int cou;
flag=1;
for(int i=0;i<100010;i++) bin[i]=i;
memset(vis,0,sizeof(vis));
memset(deg,0,sizeof(deg));
if(a<0&&b<0) break;
if(a==0&&b==0)
{
k++;
cout<<"Case "<<k<<" is a tree."<<endl;
continue;
}
if(a!=b){
merge(a,b);
vis[a]=1;
vis[b]=1;
deg[b]++;
}
while(scanf("%d%d",&a,&b)==2)
{
if(a==0&&b==0) break;
else{
if(a!=b) {
merge(a,b);
vis[a]=1;
vis[b]=1;
deg[b]++;
}
}
}
cou=0;
for(int i=0;i<100010;i++){
if(vis[i]==1&&bin[i]==i)
{
cou++;
}
if(deg[i]>1){
flag=0;
break;
}
}
if(flag==0){
k++;
cout<<"Case "<<k<<" is not a tree."<<endl;
}
else{
if(cou==1){
k++;
cout<<"Case "<<k<<" is a tree."<<endl;
}
else{
k++;
cout<<"Case "<<k<<" is not a tree."<<endl;
}
}
}
return 0;
}