#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD = 1e9+7;
const double INF = 1e18;
const int N = 505;
struct Point{
ll x,y;
Point(ll _x=0,ll _y=0){
x=_x;
y=_y;
}
}p[N];
int ori(Point p1,Point p2,Point p3){
ll val=(p2.y-p1.y)*(p3.x-p2.x)-(p2.x-p1.x)*(p3.y-p2.y);
if(val>0)return 1;
return 2;
}
bool intersect(Point p1,Point q1,Point p2,Point q2){
int o1=ori(p1,q1,p2);
int o2=ori(p1,q1,q2);
int o3=ori(p2,q2,p1);
int o4=ori(p2,q2,q1);
if(o1!=o2&&o3!=o4)return true;
return false;
}
double dist(Point p1,Point p2){
ll dx=abs(p1.x-p2.x);
ll dy=abs(p1.y-p2.y);
return sqrt((double)dx*dx+(double)dy*dy);
}
int quad(Point p1){
if(p1.x<=0&&p1.y>=0)return 1;
if(p1.x>0&&p1.y>0)return 2;
if(p1.x>0&&p1.y<=0)return 3;
return 4;
}
bool cmp(const Point &p1,const Point &p2){
if(quad(p1)!=quad(p2))return quad(p1)<quad(p2);
int o=ori(Point(),p1,p2);
if(o==1)return true;
return false;
}
int n;
double dp[N][N];
bool ok[N][N];
double solve(int from,int to){
if(from>to)return 0.0;
if(dp[from][to]!=INF)return dp[from][to];
int c=0;
for(int i=from+1;i<to;i++){
if(!c&&ok[from][i])dp[from][to]=min(dp[from][to],dist(Point(),p[from])+dist(p[from],p[i])+dist(p[i],Point())+solve(from+1,i-1)+solve(i+1,to));
c^=1;
}
if(ok[from][to])dp[from][to]=min(dp[from][to],solve(from+1,to-1)+dist(Point(),p[from])+dist(Point(),p[to])+dist(p[from],p[to]));
return dp[from][to];
}
int main()
{
ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>p[i].x>>p[i].y;
}
sort(p+1,p+1+n,cmp);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j)continue;
ok[i][j]=true;
for(int k=1;k<=n;k++){
if(i!=k&&j!=k){
if(intersect(p[i],p[j],p[k],Point()))ok[i][j]=false;
}
}
}
}
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)dp[i][j]=INF;
cout<<fixed<<setprecision(6)<<solve(1,n);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKY29uc3QgbGwgTU9EID0gMWU5Kzc7CmNvbnN0IGRvdWJsZSBJTkYgPSAxZTE4Owpjb25zdCBpbnQgTiA9IDUwNTsKCgpzdHJ1Y3QgUG9pbnR7CiAgICBsbCB4LHk7CiAgICBQb2ludChsbCBfeD0wLGxsIF95PTApewogICAgICAgIHg9X3g7CiAgICAgICAgeT1feTsKICAgIH0KfXBbTl07CgppbnQgb3JpKFBvaW50IHAxLFBvaW50IHAyLFBvaW50IHAzKXsKICAgIGxsIHZhbD0ocDIueS1wMS55KSoocDMueC1wMi54KS0ocDIueC1wMS54KSoocDMueS1wMi55KTsKCiAgICBpZih2YWw+MClyZXR1cm4gMTsKICAgIHJldHVybiAyOwp9Cgpib29sIGludGVyc2VjdChQb2ludCBwMSxQb2ludCBxMSxQb2ludCBwMixQb2ludCBxMil7CiAgICBpbnQgbzE9b3JpKHAxLHExLHAyKTsKICAgIGludCBvMj1vcmkocDEscTEscTIpOwogICAgaW50IG8zPW9yaShwMixxMixwMSk7CiAgICBpbnQgbzQ9b3JpKHAyLHEyLHExKTsKCiAgICBpZihvMSE9bzImJm8zIT1vNClyZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKfQoKZG91YmxlIGRpc3QoUG9pbnQgcDEsUG9pbnQgcDIpewogICAgbGwgZHg9YWJzKHAxLngtcDIueCk7CiAgICBsbCBkeT1hYnMocDEueS1wMi55KTsKCiAgICByZXR1cm4gc3FydCgoZG91YmxlKWR4KmR4Kyhkb3VibGUpZHkqZHkpOwp9CgppbnQgcXVhZChQb2ludCBwMSl7CiAgICBpZihwMS54PD0wJiZwMS55Pj0wKXJldHVybiAxOwogICAgaWYocDEueD4wJiZwMS55PjApcmV0dXJuIDI7CiAgICBpZihwMS54PjAmJnAxLnk8PTApcmV0dXJuIDM7CiAgICByZXR1cm4gNDsKfQoKYm9vbCBjbXAoY29uc3QgUG9pbnQgJnAxLGNvbnN0IFBvaW50ICZwMil7CiAgICBpZihxdWFkKHAxKSE9cXVhZChwMikpcmV0dXJuIHF1YWQocDEpPHF1YWQocDIpOwogICAgaW50IG89b3JpKFBvaW50KCkscDEscDIpOwogICAgaWYobz09MSlyZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKfQoKaW50IG47CmRvdWJsZSBkcFtOXVtOXTsKYm9vbCBva1tOXVtOXTsKCmRvdWJsZSBzb2x2ZShpbnQgZnJvbSxpbnQgdG8pewogICAgaWYoZnJvbT50bylyZXR1cm4gMC4wOwogICAgaWYoZHBbZnJvbV1bdG9dIT1JTkYpcmV0dXJuIGRwW2Zyb21dW3RvXTsKCiAgICBpbnQgYz0wOwogICAgZm9yKGludCBpPWZyb20rMTtpPHRvO2krKyl7CiAgICAgICAgaWYoIWMmJm9rW2Zyb21dW2ldKWRwW2Zyb21dW3RvXT1taW4oZHBbZnJvbV1bdG9dLGRpc3QoUG9pbnQoKSxwW2Zyb21dKStkaXN0KHBbZnJvbV0scFtpXSkrZGlzdChwW2ldLFBvaW50KCkpK3NvbHZlKGZyb20rMSxpLTEpK3NvbHZlKGkrMSx0bykpOwogICAgICAgIGNePTE7CiAgICB9CgogICAgaWYob2tbZnJvbV1bdG9dKWRwW2Zyb21dW3RvXT1taW4oZHBbZnJvbV1bdG9dLHNvbHZlKGZyb20rMSx0by0xKStkaXN0KFBvaW50KCkscFtmcm9tXSkrZGlzdChQb2ludCgpLHBbdG9dKStkaXN0KHBbZnJvbV0scFt0b10pKTsKCiAgICByZXR1cm4gZHBbZnJvbV1bdG9dOwp9CgoKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTtjaW4udGllKDApO2NvdXQudGllKDApOwogICAgY2luPj5uOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspewogICAgICAgIGNpbj4+cFtpXS54Pj5wW2ldLnk7CiAgICB9CgogICAgc29ydChwKzEscCsxK24sY21wKTsKCiAgICBmb3IoaW50IGk9MTtpPD1uO2krKyl7CiAgICAgICAgZm9yKGludCBqPTE7ajw9bjtqKyspewogICAgICAgICAgICBpZihpPT1qKWNvbnRpbnVlOwogICAgICAgICAgICBva1tpXVtqXT10cnVlOwogICAgICAgICAgICBmb3IoaW50IGs9MTtrPD1uO2srKyl7CiAgICAgICAgICAgICAgICBpZihpIT1rJiZqIT1rKXsKICAgICAgICAgICAgICAgICAgICBpZihpbnRlcnNlY3QocFtpXSxwW2pdLHBba10sUG9pbnQoKSkpb2tbaV1bal09ZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZm9yKGludCBpPTE7aTw9bjtpKyspZm9yKGludCBqPTE7ajw9bjtqKyspZHBbaV1bal09SU5GOwoKICAgIGNvdXQ8PGZpeGVkPDxzZXRwcmVjaXNpb24oNik8PHNvbHZlKDEsbik7CiAgICByZXR1cm4gMDsKfQo=