#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cstdio>
using namespace std;
int n;
typedef struct
{
double x;
double y;
}Point;
Point p[110],s[110];
int top;
double Mul(Point a,Point b,Point c)
{
return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);
}
double dis(Point a,Point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int cmp(const void *a,const void *b)
{
Point c=*(Point *)a;
Point d=*(Point *)b;
double k=Mul(p[0],c,d);
if(k<0||(!k&&dis(c,p[0])>dis(d,p[0]))) return 1;
return -1;
}
void con()
{
int i;
for(i=1;i<n;i++)
{
Point temp;
if(p[i].y<p[0].y||(p[i].y==p[0].y&&p[i].x<p[0].x))
{
temp=p[i];
p[i]=p[0];
p[0]=temp;
}
}
qsort(p+1,n-1,sizeof(p[0]),cmp);
s[0]=p[0];
s[1]=p[1];
s[2]=p[2];
top=2;
for(i=3;i<n;i++)
{
while(top>=2&&Mul(s[top-1],s[top],p[i])<=0) top--;
top++;
s[top]=p[i];
}
}
int main()
{
while(cin>>n,n)
{
int i;
for(i=0;i<n;i++)
{
cin>>p[i].x>>p[i].y;
}
if(n==1)
{
cout<<"0.00"<<endl;
continue;
}
else if(n==2)
{
printf("%.2f\n",dis(p[0],p[1]));
continue;
}
con();
double coun=0;
for(i=0;i<top;i++)
{
coun+=dis(s[i],s[i+1]);
}
coun+=dis(s[top],s[0]);
printf("%.2f\n",coun);
}
return 0;
}