#include<iostream>
#include<cstdio>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<cmath>
#include<list>
#include<vector>
#include<cstring>
#include<iterator>
#include<algorithm>
using namespace std;
map< int ,vector< int > > graph;
map< int ,bool > vi;
bool dfs( int s,int from)
{
vi[ s] = true ;
for ( int i= 0 ; i< graph[ s] .size ( ) ; i++ )
if ( ! vi[ graph[ s] [ i] ] )
{
if ( ! dfs( graph[ s] [ i] ,s) )
return false ;
}
else if ( from ! = graph[ s] [ i] )
return false ;
return true ;
}
int main( )
{
int s,from,c= 1 ;
while ( scanf ( "%d%d" ,& s,& from) && s+ from >= 0 )
{
int a= s,b= from;
if ( a+ b == 0 )
{
printf ( "Case %d is a tree.\n " ,c++ ) ;
continue ;
}
graph = map< int ,vector< int > > ( ) ;
graph[ a] .push_back ( b) ;
graph[ b] .push_back ( a) ;
vi = map< int ,bool > ( ) ;
while ( scanf ( "%d%d" ,& a,& b) && a+ b)
{
graph[ a] .push_back ( b) ;
graph[ b] .push_back ( a) ;
}
bool ok = dfs( s,- 1 ) ;
for ( map< int ,vector< int > > :: iterator it = graph.begin ( ) ; ok && it! = graph.end ( ) ; it++ )
ok & = ( vi[ it- > first] == true ) ;
if ( ok)
printf ( "Case %d is a tree.\n " ,c++ ) ;
else
printf ( "Case %d is not a tree.\n " ,c++ ) ;
}
return 0 ;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNzdGRpbz4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxzZXQ+CiNpbmNsdWRlPG1hcD4KI2luY2x1ZGU8cXVldWU+CiNpbmNsdWRlPGNtYXRoPgojaW5jbHVkZTxsaXN0PgojaW5jbHVkZTx2ZWN0b3I+CiNpbmNsdWRlPGNzdHJpbmc+CiNpbmNsdWRlPGl0ZXJhdG9yPgojaW5jbHVkZTxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cm1hcDxpbnQsdmVjdG9yPGludD4gPmdyYXBoOwptYXA8aW50LGJvb2wgPnZpOwpib29sIGRmcyhpbnQgcyxpbnQgZnJvbSkKewogICAgdmlbc10gPSB0cnVlOwogICAgZm9yKGludCBpPTA7IGk8Z3JhcGhbc10uc2l6ZSgpOyBpKyspCiAgICAgICAgaWYoIXZpW2dyYXBoW3NdW2ldXSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKCFkZnMoZ3JhcGhbc11baV0scykpCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGZyb20gIT0gZ3JhcGhbc11baV0pCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwp9CmludCBtYWluKCkKewogICAgaW50IHMsZnJvbSxjPTE7CiAgICB3aGlsZShzY2FuZigiJWQlZCIsJnMsJmZyb20pICYmIHMrZnJvbSA+PSAwKQogICAgewogICAgICAgIGludCBhPXMsYj1mcm9tOwogICAgICAgIGlmKGErYiA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCJDYXNlICVkIGlzIGEgdHJlZS5cbiIsYysrKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGdyYXBoID0gbWFwPGludCx2ZWN0b3I8aW50PiA+KCk7CiAgICAgICAgZ3JhcGhbYV0ucHVzaF9iYWNrKGIpOwogICAgICAgIGdyYXBoW2JdLnB1c2hfYmFjayhhKTsKICAgICAgICB2aSA9IG1hcDxpbnQsYm9vbCA+KCk7CiAgICAgICAgd2hpbGUoc2NhbmYoIiVkJWQiLCZhLCZiKSAmJiBhK2IpCiAgICAgICAgewogICAgICAgICAgICBncmFwaFthXS5wdXNoX2JhY2soYik7CiAgICAgICAgICAgIGdyYXBoW2JdLnB1c2hfYmFjayhhKTsKICAgICAgICB9CgogICAgICAgIGJvb2wgb2sgPSBkZnMocywtMSk7CiAgICAgICAgZm9yKG1hcDxpbnQsdmVjdG9yPGludD4gPjo6aXRlcmF0b3IgaXQgPSBncmFwaC5iZWdpbigpOyBvayAmJiBpdCE9Z3JhcGguZW5kKCk7IGl0KyspCiAgICAgICAgICAgIG9rICY9ICh2aVtpdC0+Zmlyc3RdID09IHRydWUpOwogICAgICAgIGlmKG9rKQogICAgICAgICAgICBwcmludGYoIkNhc2UgJWQgaXMgYSB0cmVlLlxuIixjKyspOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcHJpbnRmKCJDYXNlICVkIGlzIG5vdCBhIHRyZWUuXG4iLGMrKyk7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=
stdin
NiA4ICA1IDMgIDUgMiAgNiA0CjUgNiAgMCAwCgo4IDEgIDcgMyAgNiAyICA4IDkgIDcgNQo3IDQgIDcgOCAgNyA2ICAwIDAKCjMgOCAgNiA4ICA2IDQKNSAzICA1IDYgIDUgMiAgMCAwCgoxIDIgMSAzIDIgNCAyIDUgMiA2IDIgNyAzIDggOCA5IDkgMTAgMTAgMTEgMTEgMTIgMTIgMTMgMCAwCgoxIDIgMCAwCgoxIDIgMiAxIDAgMAoKMSAyIDMgNCAwIDAKMSAyICAyIDQgIDIgNSAgMiA2ICAxIDMgIDMgNiAgMCAwCgoxMDAwMDggMjAwMDA4IDEwMDA4IDMwMDAwIDAgMAotMSAtMQ==
6 8 5 3 5 2 6 4
5 6 0 0
8 1 7 3 6 2 8 9 7 5
7 4 7 8 7 6 0 0
3 8 6 8 6 4
5 3 5 6 5 2 0 0
1 2 1 3 2 4 2 5 2 6 2 7 3 8 8 9 9 10 10 11 11 12 12 13 0 0
1 2 0 0
1 2 2 1 0 0
1 2 3 4 0 0
1 2 2 4 2 5 2 6 1 3 3 6 0 0
100008 200008 10008 30000 0 0
-1 -1