/* 可以用并查集来解决这个问题,给出一些边判断是不是一个棵树, 只需要判断只有一个跟节点并且每个点的度不大于1就行、
这个题刚开始RE了几次 一直没找到原因,最后才发现 只要2个数都小于0就终止,我以为是-1,-1 结果RE
*/
#include<cstdio>
#include<cstring>#define M 100010
int p[M],vis[M],deg[M];
int init()
{
for(int i = 0; i <= M; i++)
p[i] = i;
memset(vis,0,sizeof(vis));
memset(deg,0,sizeof(deg));
}
int find(int x)
{
return x==p[x]?x:p[x]=find(p[x]);
}
int Union(int x,int y)
{
vis[x]=vis[y]=1;
int px=find(x);
int py=find(y);
if(px!=py)
{
p[py] = px;
deg[y]++;
}
}
int main()
{
int a,b,kc=1;
while(scanf("%d%d",&a,&b)==2)
{
if(a<0&&b<0) break;
int l=1<<30,r=-1;
if(l>a) l = a;
if(l>b) l = b;
if(r<a) r = a;
if(r<b) r = b;
init();
Union(a,b);
while(1)
{
scanf("%d%d",&a,&b);
if(!a&&!b) break;
Union(a,b);
if(l>a) l = a;
if(l>b) l = b;
if(r<a) r = a;
if(r<b) r = b;
}
int count=0;
for(int i = l; i <= r; i++)
if((p[i]==i&&vis[i])||deg[i]>1)
count++;
if(count!=1)
printf("Case %d is not a tree.\n",kc++);
else printf("Case %d is a tree.\n",kc++);
}
}