//直接回溯就可以了,记得加上16
#include<iostream>
#include<stdio.h>
#include<string>
#include<algorithm>
#include<string.h>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#include<limits.h>
#include<math.h>
using namespace std;
double minn,a[20][2],b[20][2],final[20][2],dist[20],finaldi[20];
int vis[20];
int n;
double di(double x1,double y1,double x2,double y2)
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))+16;
}
void dfs(int x)
{
int i;
double sum=0;
if(x==n)
{
for(i=0;i<n-1;i++)
sum+=dist[i];
if(sum<minn)
{
minn=sum;
memcpy(finaldi,dist,sizeof(dist));
memcpy(final,b,sizeof(b));
}
return ;
}
for(i=0;i<n;i++)
if(!vis[i])
{
vis[i]=1;
b[x][0]=a[i][0];
b[x][1]=a[i][1];
if(x!=0)
dist[x-1]=di(b[x][0],b[x][1],b[x-1][0],b[x-1][1]);
dfs(x+1);
vis[i]=0;
}
}
main()
{
int i,count=1;
//freopen("D:\\m.txt","r",stdin);
while(scanf("%d",&n)&&n)
{
memset(vis,0,sizeof(vis));
for(i=0;i<n;i++)
scanf("%lf%lf",&a[i][0],&a[i][1]);
minn=100000;
dfs(0);
printf("**********************************************************\n");
printf("Network #%d\n",count++);
for(i=0;i<n-1;i++)
printf("Cable requirement to connect (%.0lf,%.0lf) to (%.0lf,%.0lf) is %.2lf feet.\n",final[i][0],final[i][1],final[i+1][0],final[i+1][1],finaldi[i]);
printf("Number of feet of cable required is %.2lf.\n",minn);
}
return 0;
}