#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 100000;
int v[MAXN+1];
bool visited[MAXN+1];
int length = MAXN;
bool nocircleflag; // 判断是否成环
int edgecount; // 边的个数
int Find(int x) {
if(x == v[x])
return x;
else
return v[x] = Find(v[x]);
}
bool Union(int x, int y) {
edgecount++;
visited[x] = true;
visited[y] = true;
x = Find(x);
y = Find(y);
if(x == y) {
nocircleflag = false;
return false;
}
else {
v[x] = y;
return true;
}
}
bool isconnect() {
int rootcount = 0;
for( int i=0 ; i<=MAXN ; i++ )
if(visited[i])
rootcount++;
if(rootcount == edgecount + 1)
return true;
return false;
}
void init() {
nocircleflag = true;
edgecount = 0;
for(int i=0; i<=length; i++) {
v[i] = i;
visited[i] = false;
}
}
int main()
{
int src, dest, caseno=0;
while(~scanf("%d%d", &src, &dest) && (src != -1 && dest != -1)) {
init();
if(src==0 && dest==0) {
//为空树
printf("Case %d is a tree.\n", ++caseno);
} else {
Union(src, dest);
while(1){
scanf("%d%d", &src, &dest);
if( src==0 && dest==0 )
break;
Union(src, dest);
}
if(nocircleflag && isconnect())
printf("Case %d is a tree.\n", ++caseno);
else
printf("Case %d is not a tree.\n", ++caseno);
}
}
return 0;
}