#include<bits/stdc++.h>
#include<iterator>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<string>
#define pb push_back
#define f first
#define s second
#define MX 100000
using namespace std;
const int inf = 10000 ;
map< int ,int > mp;
map< int ,int > :: iterator it1;
set< int > st;
set< int > :: iterator it;
vector< int > adj[ MX] ,cost[ MX] ;
int cs= 1 ;
void bfs( int s,int d) {
int dis[ MX] ,path[ MX] ;
queue< int > q;
for ( it= st.begin ( ) ; it! = st.end ( ) ; it++ ) mp[ * it] = - 1 ;
dis[ s] = 0 ; mp[ s] = 1 ;
q.push ( s) ;
while ( ! q.empty ( ) ) {
int u= q.front ( ) ;
q.pop ( ) ;
for ( int i= 0 ; i< adj[ u] .size ( ) ; i++ ) {
int v= adj[ u] [ i] ;
dis[ v] = dis[ u] + 1 ;
if ( mp[ v] == - 1 && dis[ v] < d+ 1 ) {
mp[ v] = 1 ;
q.push ( v) ;
}
}
}
int yet= 0 ;
for ( it1= mp.begin ( ) ; it1! = mp.end ( ) ; it1++ ) {
if ( ( ( * it1) .s ) ! = 1 ) yet++ ;
}
printf ( "Case %d: %d nodes not reachable from node %d with TTL = %d.\n " ,cs++ ,yet,s,d) ;
}
int main( ) {
int e,n,x1,x2,w,s,d;
while ( scanf ( "%d" ,& e) == 1 && e! = 0 ) {
while ( e-- ) {
scanf ( "%d%d" ,& x1,& x2) ;
adj[ x1] .pb ( x2) ; adj[ x2] .pb ( x1) ;
st.insert ( x1) ; st.insert ( x2) ;
}
while ( scanf ( "%d%d" ,& s,& d) == 2 && s! = 0 && d! = 0 ) {
bfs( s,d) ;
}
adj[ MX] .clear ( ) ; st.clear ( ) ; mp.clear ( ) ;
}
return 0 ;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGU8aXRlcmF0b3I+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8cXVldWU+CiNpbmNsdWRlPG1hcD4KI2luY2x1ZGU8c2V0PgojaW5jbHVkZTxzdHJpbmc+CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgZiBmaXJzdAojZGVmaW5lIHMgc2Vjb25kCiNkZWZpbmUgTVggMTAwMDAwCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgaW5mID0xMDAwMDsKbWFwPGludCxpbnQ+bXA7Cm1hcDxpbnQsaW50Pjo6aXRlcmF0b3IgaXQxOwpzZXQ8aW50PnN0OwpzZXQ8aW50Pjo6aXRlcmF0b3IgaXQ7CnZlY3RvcjxpbnQ+YWRqW01YXSxjb3N0W01YXTsKCmludCBjcz0xOwp2b2lkIGJmcyhpbnQgcyxpbnQgZCl7CglpbnQgZGlzW01YXSxwYXRoW01YXTsKCXF1ZXVlPGludD5xOwoJZm9yKGl0PXN0LmJlZ2luKCk7aXQhPXN0LmVuZCgpO2l0KyspIG1wWyppdF09LTE7CglkaXNbc109MDttcFtzXT0xOwoJcS5wdXNoKHMpOwoJd2hpbGUoIXEuZW1wdHkoKSl7CgkJaW50IHU9cS5mcm9udCgpOwoJCXEucG9wKCk7CgkJZm9yKGludCBpPTA7aTxhZGpbdV0uc2l6ZSgpO2krKyl7CgkJCWludCB2PWFkalt1XVtpXTsKCQkJZGlzW3ZdPWRpc1t1XSsxOwoJCQlpZihtcFt2XT09LTEgJiYgZGlzW3ZdPGQrMSl7CgkJCQltcFt2XT0xOwoJCQkJcS5wdXNoKHYpOwoJCQl9CgkJfQoJfQoJaW50IHlldD0wOwoJZm9yKGl0MT1tcC5iZWdpbigpO2l0MSE9bXAuZW5kKCk7aXQxKyspIHsKCQlpZigoKCppdDEpLnMpIT0xKSB5ZXQrKzsKCX0KCXByaW50ZigiQ2FzZSAlZDogJWQgbm9kZXMgbm90IHJlYWNoYWJsZSBmcm9tIG5vZGUgJWQgd2l0aCBUVEwgPSAlZC5cbiIsY3MrKyx5ZXQscyxkKTsKfQppbnQgbWFpbigpewoJaW50IGUsbix4MSx4Mix3LHMsZDsKCXdoaWxlKHNjYW5mKCIlZCIsJmUpPT0xICYmIGUhPTApewoJCXdoaWxlKGUtLSl7CgkJCXNjYW5mKCIlZCVkIiwmeDEsJngyKTsKCQkJYWRqW3gxXS5wYih4Mik7YWRqW3gyXS5wYih4MSk7CgkJCXN0Lmluc2VydCh4MSk7c3QuaW5zZXJ0KHgyKTsKCQl9CgkJd2hpbGUoc2NhbmYoIiVkJWQiLCZzLCZkKT09MiAmJiBzIT0wICYmIGQhPTApewoJCQliZnMocyxkKTsKCQl9CgkJYWRqW01YXS5jbGVhcigpO3N0LmNsZWFyKCk7bXAuY2xlYXIoKTsKCX0KCXJldHVybiAwOwp9
stdin
MTYKMTAgMTUgMTUgMjAgMjAgMjUgMTAgMzAgMzAgNDcgNDcgNTAgMjUgNDUgNDUgNjUKMTUgMzUgMzUgNTUgMjAgNDAgNTAgNTUgMzUgNDAgNTUgNjAgNDAgNjAgNjAgNjUKMzUgMiAzNSAzIDAgMAoxNAoxIDIgMiA3IDEgMyAzIDQgMyA1IDUgMTAgNSAxMQo0IDYgNyA2IDcgOCA3IDkgOCA5IDggNiA2IDExCjEgMSAxIDIgMyAyIDMgMyAwIDAKMAo=
16
10 15 15 20 20 25 10 30 30 47 47 50 25 45 45 65
15 35 35 55 20 40 50 55 35 40 55 60 40 60 60 65
35 2 35 3 0 0
14
1 2 2 7 1 3 3 4 3 5 5 10 5 11
4 6 7 6 7 8 7 9 8 9 8 6 6 11
1 1 1 2 3 2 3 3 0 0
0