#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")