#include <cstdio>
#include <queue>
#include <map>
#include <vector>
using namespace std;
map<int, int> mapping;
struct node_type{
	vector<int> connceted_node;
};
int NC;
int numOfnode;
int BFS(int start_node, int TTL, node_type node[]);
int main()
{
	//freopen("input.txt","rt",stdin);
	int Case = 1;
	while (scanf("%d", &NC)) {
		if (!NC) break;

		node_type node[100];
		mapping.clear();

		int node1, node2, i, j;
		for (i=0, j=0; i<NC; ++i) {
			scanf("%d%d", &node1, &node2);
			if (mapping.find(node1) == mapping.end())
				mapping[node1] = j++;
			if (mapping.find(node2) == mapping.end())
				mapping[node2] = j++;
			node[mapping[node1]].connceted_node.push_back(mapping[node2]);
			node[mapping[node2]].connceted_node.push_back(mapping[node1]);
		}
		numOfnode = j;
		int TTL;
		while (scanf("%d%d", &node1, &TTL)) {
			if (!node1 && !TTL) break;
			int numOfNotReach = BFS(node1, TTL, node);
			printf("Case %d: %d nodes not reachable from node %d with TTL = %d.\n",
				   Case++, numOfNotReach, node1, TTL);
		}
	}
	return 0;
}
int BFS(int start_node, int TTL, node_type node[])
{
	queue<int> Q;
	Q.push(mapping[start_node]);
	int visit[100] = {0};
	visit[mapping[start_node]] = 1;

	int nOfReach = 1;
	while (!Q.empty()) {
		int cur = Q.front();
		if (visit[cur] > TTL) return numOfnode - nOfReach;
		Q.pop();
		for (int nxt : node[cur].connceted_node) {
			if(visit[nxt] == 0){
				visit[nxt] = visit[cur] + 1;
				Q.push(nxt);
				++nOfReach;
			}
		}
	}
	return numOfnode - nOfReach;
}