// 这道题虽然是个模板题,但还是纠结了很久,主要原因是在hdu1392上有同样的题目,可惜hdu上忽略了n=2的情况,导致一直找不出buger
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
struct node
{
double x,y;
}a[103],stack[103],flag;
int n;
double dis(node a,node b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int sect(node a,node b,node c)
{
return (a.x-c.x)*(b.y-c.y)<(b.x-c.x)*(a.y-c.y);
}
int cmp(node a,node b)
{
return sect(a,b,flag)>1e-8;
}
double gram()
{
int top=1;
stack[0]=a[0];
stack[1]=a[1];
int i;
for(i=2;i<n;i++)
{
while(top>0&§(a[i],stack[top],stack[top-1])>1e-8)top--;
stack[++top]=a[i];
}
// printf("/n");
// for(i=0;i<=top;i++)
// printf("%d %d/n",stack[i].x,stack[i].y);
// printf("/n");
double ans=dis(stack[top],stack[0]);
for(i=0;i<top;i++)
ans+=dis(stack[i],stack[i+1]);
return ans;
}
int main()
{
while(scanf("%d",&n)!=EOF&&n)
{
flag.x=flag.y=100000.0;
int index,i;
for(i=0;i<n;i++)
{
scanf("%lf%lf",&a[i].x,&a[i].y);
if(a[i].x<flag.x||a[i].x==flag.x&&a[i].y<flag.y)
{
index=i;
flag=a[i];
}
}
if(n==1)
{
printf("0.00/n");
continue;
}
// else if(n==2) 在zju上这一步要去掉,因为题目是用绳子围起来的长度,hdu的测试数据有有误,
// {
// printf("%.2lf/n",dis(a[0],a[1]));
// continue;
// }
a[index]=a[0];
a[0]=flag;
sort(a+1,a+n,cmp);
// printf("/n");
// for(i=0;i<n;i++)
// printf("%d %d/n",a[i].x,a[i].y);
// printf("/n");
printf("%.2lf/n",gram());
}
return 0;
}