/*   @JUDGE_ID:   1705PZ   10000   C++ */
#include <iostream>
#include <vector>

class node {
public:
	int num, length;
	vector<int> c;

	node(int n) : num(n), length(0){
	}

	void add_connect(int conn) {
		c.push_back(conn);
	}

};

node* find_node (vector<node> &nodes, int n)
{
	int i;
	for ( i = 0; i < nodes.size(); i++) {
		if ( nodes[i].num == n ) {
			break;
		}
	}
	if( i == nodes.size() ) {
		node new_node( n );
		nodes.push_back( new_node );
	}
	return &nodes[i];
}

void travel(vector<node> &nodes, int s, int l) {
	int i;
	node *n;

	n = find_node(nodes, s);

	if( l > n->length) {
		n->length = l;
	}

	for( i = 0; i < n->c.size(); i++) {
		travel(nodes, n->c[i], n->length + 1);
	}
}

main()
{
	int i;
	int size, start, p, q;
	int count = 0, max, last;
	node *np, *nq;

	while(1) {

		vector<node> nodes;

		cin >> size;
		if(!size) {
			break;
		}
		nodes.reserve(size);

		cin >> start;

		while(1) {
			cin >> p >> q;
			if (!p && !q) {
				break;
			}
			np = find_node( nodes, p);
			nq = find_node( nodes, q);
			np->add_connect( q );
		}
		
		travel(nodes, start, 0);
		max = 0;
		last = start;

		for(i = 0; i < nodes.size(); i++) {
			if (nodes[i].length > max) {
				max = nodes[i].length;
				last = nodes[i].num;
			}
		}

		cout << "Case " << ++count << ": The longest path from " << start << " has length " << max << ", finishing at " << last << "." << endl << endl;
	}
}
