#include <iostream>            //prime算法的变形,求一条路径,使得它的最大边达到最小值
#include<cmath>
using namespace std;
int loc[205][2],edge[205][205],n,t,i,j,k;
const int MaxWeight=3000000;
struct Mintree 
{
    int end,weight;        //没有必要记录起点
}mintree[205],e;
void Prim()
{
    int min,v,com;
    for(i=0;i<n-1;++i)        //求n-1条边
    {
        min=MaxWeight;
        for(j=i;j<n-1;++j)
        {    
            if(mintree[j].weight<min)        //求最小权值边
            {
                min=mintree[j].weight;k=j;
            }
        }    
        swap(mintree[k],mintree[i]);    //最小边移至前端
        v=mintree[i].end;
        if(v==1)    //找到终点
        {
            printf("Scenario #%d\nFrog Distance = %.3lf\n\n",++t,sqrt(mintree[i].weight+0.0));
            return ;
        }
        for(j=i+1;j<n-1;++j)    //更新后面的边
        {        
            com=max(mintree[i].weight,edge[v][mintree[j].end]);        //prime算法的变形, 注意不是 com=edge[v][mintree[j].end];  
            //求最短路径的最大边
            if(com<mintree[j].weight)
            {
                mintree[j].weight=com;
            }
        }
    }
}
int main()
{
    while(scanf("%d",&n)&&n)
    {
        for(i=0;i<n;++i)    //顶点下标从0开始
            scanf("%d%d",&loc[i][0],&loc[i][1]);
        for(i=0;i<n;++i)
            for(j=0;j<n;++j)
            {
                edge[i][j]=pow((loc[i][0]-loc[j][0])+0.0,2.0)+pow((loc[i][1]-loc[j][1])+0.0,2.0);
            }
        for(i=0;i<n-1;++i)        //一共有n-1条边,下标从0开始, mintree[0].begin=0,mintree[0].end=1;
        {
            mintree[i].end=i+1;    
            mintree[i].weight=edge[0][i+1];
        }
        Prim();
    }
    return 0;
}