#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int M = 1005;
int vist[M], Set[M];
int du[M];
int a, b, maxn;
int flag, cont, k;
/*
形成树的条件是, 每一个节点的入度只能为1,
且根只能有一个。
*/
int Find(int x) {
return x == Set[x]? x : Set[x] = Find(Set[x]);
}
void Union(int x, int y) {
x = Find(x);
y = Find(y);
if(x != y) {
Set[y] = x;
}
}
void init() {
for(int i = 1; i < M; i++) {
Set[i] = i;
vist[i] = 0;
du[i] = 0;
}
flag = 1;
cont = 0;
k = 0;
maxn = 0;
}
int main()
{
int q = 1;
init();
while(scanf("%d%d", &a, &b) != EOF) {
if(a < 0 && b < 0)
break;
if(a == 0 && b == 0) {
for(int i = 1; i < M; i++) {
if(vist[i] && Set[i] == i) {
cont++;
}
if(du[i] > 1) {
flag = 0;
break;
}
}
if(cont >1)
flag = 0;
if(flag)
printf("Case %d is a tree.\n", q++);
else
printf("Case %d is not a tree.\n", q++);
flag = 0;
init();
continue;
}
if(a != b && Find(a) == Find(b)) {
flag = 0;
}
else {
vist[a] = 1;
vist[b] = 1;
du[b]++;
Union(a, b);
}
}
return 0;
}