#include <iostream>
#include<vector>
using namespace std;
int main() {
//直接用树的定义,1仅有一个根 2每个结点仅被一个双亲结点指向
int m, n;
int id = 1;
while (cin >> m >> n) {
if (m < 0) break;
if(!m&&!n){cout << "Case " << id++ << " is a tree." << endl;continue;}//如果直接输入0 0 则认为它是一棵树
vector<int>v(10001, 0);
vector<int>vt;//这两个数组要在while内定义
int count1 = 0, count2 = 0;
while (m != 0 && n != 0) {
if (!v[m]) v[m]++;
if (!v[n]) v[n]++;//找到所有出现的结点,全部置为1
vt.push_back(n);//对入度进行收集,下面对他们自增
cin >> m >> n;
}
for (int i = 0; i < vt.size(); i++) {
v[vt[i]]++;//如果满足树的定义,则整体数组元素的值是一个1 其他全部2
}
for (int i = 0; i < 10001; i++) {
if (v[i] == 1) count1++;
if (v[i] > 2) count2++;//如果出现不止一个1,或者有元素值大于2,说明不符合定义
}
if (count1 != 1 || count2) cout << "Case " << id << " is not a tree." << endl;
else cout << "Case " << id << " is a tree." << endl;
id++;
}
//如果它出现重复的边,只需要用一个集合,每次判一下边是否重复,从而决定他是否存入vt;自环的问题,count1是0,他判断结果是不是树
}
// 64 位输出请用 printf("%lld")