1 #include <iostream>
2 #include <cstring>
3 #include <cstdio>
4 #include <vector>
5
6 using namespace std;
7
8 vector<int> used;
9 int father[101000];
10
11 int main()
12 {
13 int time=1;
14 while(true)
15 {
16 for(int i=0;i<=101000;i++)
17 {
18 father[i]=i;
19 }
20 int flag=1;
21 int x,y;
22 used.clear();
23 while(scanf("%d%d",&x,&y)!=EOF)
24 {
25 if(x==-1&&y==-1)
26 goto F;
27 if(!(x==0&&y==0))
28 {
29 if(father[y]==y)
30 {
31 int fx=x;
32 while(fx!=father[fx])
33 {
34 fx=father[fx];
35 }
36 if(fx==y)
37 flag=0;
38 father[y]=fx;
39 used.push_back(x);
40 used.push_back(y);
41 while(x!=fx)
42 {
43 int tmp=father[x];
44 father[x]=fx;
45 x=tmp;
46 }
47 }
48 else
49 flag=0;
50 }
51 else
52 {
53 if(used.empty())
54 printf("Case %d is a tree.\n",time);
55 else
56 {
57 int f=used[0];
58 int ff;
59 while(f!=father[f])
60 f=father[f];
61 for(int i=1;i<used.size();i++)
62 {
63 ff=used[i];
64 while(ff!=father[ff])
65 {
66 ff=father[ff];
67 }
68 if(ff!=f)
69 {
70 flag=0;
71 break;
72 }
73 }
74 if(flag)
75 printf("Case %d is a tree.\n",time);
76 else
77 printf("Case %d is not a tree.\n",time);
78 }
79 time++;
80 break;
81 }
82 }
83 }
84 F:
85 return 0;
86 }