#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
const double inf=1e100,EPS=1e-6;
const int W=20;
double l,now;
int n;
//Ò»µÀǽ
struct wall
{
	double x,y[6],val[5];
} w[W];
//big bug:double->int
double length(double x1,double y1,double x2,double y2)
{
	double x=x1-x2,y=y1-y2;
	return sqrt(x*x+y*y);
}
double cross(double x1,double y1,double x2,double y2)
{
	return x1*y2-x2*y1;
}
double same(double x0,double y0,double x3,double y3,double x1,double y1,double x2,double y2)
{
	double x=x3-x0,y=y3-y0;//y0->x0
	return cross(x,y,x1-x0,y1-y0)*cross(x,y,x2-x0,y2-y0);
}
//WA double ÅжÏÕý¸ºÒªÓà 
int sign(double d)
{
	if(fabs(d)<EPS)
	{
		return 0;
	}
	else return d>0? 1:-1;
}
bool ob(int li,int lj,int ri,int rj)
{
	for(int i=li+1; i<ri; i++)
	{
		for(int j=0; j<=4; j+=2)
		{
//			printf("(%.0lf,%.0lf)(%.0lf,%.0lf)/(%.0lf,%.0lf)(%.0lf,%.0lf):",w[i].x,w[i].y[j],w[i].x,w[i].y[j+1],w[li].x,w[li].y[lj],w[ri].x,w[ri].y[rj]); 
//			printf("[%.2lf/%.2lf]\n",same(w[i].x,w[i].y[j],w[i].x,w[i].y[j+1],w[li].x,w[li].y[lj],w[ri].x,w[ri].y[rj]),same(w[li].x,w[li].y[lj],w[ri].x,w[ri].y[rj],w[i].x,w[i].y[j],w[i].x,w[i].y[j+1]));
			//Á½¸ö¶¼Í¬·½Ïò²ÅÊÇ£¬Ó¦¸Ã&&£¬´íÒÔΪ|| ,²»ÊÇ0¶¼ÊÇÕæ Á½¸öСÓÚ0²ÅÊÇÏ㽶 
			if(sign(same(w[i].x,w[i].y[j],w[i].x,w[i].y[j+1],w[li].x,w[li].y[lj],w[ri].x,w[ri].y[rj]))<0&&sign(same(w[li].x,w[li].y[lj],w[ri].x,w[ri].y[rj],w[i].x,w[i].y[j],w[i].x,w[i].y[j+1]))<0)
			{
				return 0;
			}
		}
	}
	return 1;
}
void find(int ii,int jj)
{
	for(int i=0; i<ii; i++)
	{
		for(int j=1; j<=4; j++)
		{
			l=length(w[ii].x,w[ii].y[jj],w[i].x,w[i].y[j]);
			now=w[i].val[j]+l;//i j ii,jj¸ã·´ÁË 
			if(now<w[ii].val[jj]&&ob(i,j,ii,jj))
			{
				w[ii].val[jj]=now;
			}
//			printf("(%.0lf,%.0lf)(%.0lf,%.0lf):length:%.3lf,now:%.3lf£¬val:%.3lf\n",w[ii].x,w[ii].y[jj],w[i].x,w[i].y[j],l,now,w[ii].val[jj]); 
			if(i==0) break;
		}
	}
}
void doit()
{
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=4; j++)
		{
			find(i,j);
			if(i==n) break;
		}
	}
}
int main()
{
	while(1)
	{
		scanf("%d",&n);
		if(n==-1) return 0;
		memset(&w,0,sizeof(wall)*(n+1));
		w[0].x=0;
		w[0].y[1]=5;
		w[0].val[1]=0;
		for(int i=1; i<=n; i++)
		{
			w[i].y[0]=0;
			w[i].y[5]=10;
			for(int j=1; j<=4; j++)//ÓÖ´ò³Éi 
			{
				w[i].val[j]=inf;
			}
		}
		for(int i=1; i<=n; i++)
		{
			scanf("%lf",&w[i].x);
//			cin>>w[i].x;
			for(int j=1; j<=4; j++)// ÓÖÊÇj 
			{
				scanf("%lf",&w[i].y[j]);
//				cin>>w[i].y[j];
			}
		}
		w[++n].x=10;
		w[n].y[1]=5;
		w[n].val[1]=inf;// bug û¸³Öµ 
		doit();
		printf("%.2lf\n",w[n].val[1]);
	}
	return 0; 
}