//
// main.cpp
// ceshi
//
// Created by 戴志扬 on 2016/10/25.
// Copyright © 2016年 sky.dai. All rights reserved.
//
//
// main.cpp
// ceshi
//
// Created by 戴志扬 on 2016/10/25.
// Copyright © 2016年 sky.dai. All rights reserved.
//
#include<iostream>
#include<queue>
#include<algorithm>
#include<map>
#include<cstring>
#include<cmath>
#include<cstdio>
#include <iomanip>
#include <stack>
#include <vector>
#include <sstream>
#include <climits>
using namespace std;
int sign[105][105];
int main()
{
int nodes;
int cas =1;
while(scanf("%d",&nodes)==1 && nodes)
{
int start;
int a,b;
//intial
memset(sign,-1,sizeof(sign));
scanf("%d",&start);
while(scanf("%d%d",&a,&b))
{
if(a==0 && b==0)
break;
sign[a][b] = 1;
}
int i,j;
for(i=1;i<=nodes;i++)
for(j=1;j<=nodes;j++)
{
if(sign[i][j]!=-1)
{
for(int k=1;k<=nodes;k++)
if(sign[j][k]!=-1)
{
sign[i][k] = max(sign[i][k],sign[i][j]+sign[j][k]);
}
}
}
int maxsize = -1;
int temp = 0 ;
for(i=1;i<=nodes;i++)
{
if(maxsize<sign[start][i])
{
maxsize = sign[start][i];
temp = i;
}
}
printf("Case %d: The longest path from %d has length %d, finishing at %d.\n",cas,start,maxsize,temp);
cas++;
printf("\n");
}
return 0;
}