rt
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
#define pdd pair<double,double>
using namespace std;
int n,d,cnt;
pdd c[30];
bool vis[30];
double dis[30][30],dp[30][1000000],ans=998244353.9;
int main()
{
cin>>n>>d;
for(int i=1;i<=n;++i)
scanf("%lf%lf",&c[i].first,&c[i].second);
memset(dp,127,sizeof(dp));
for(int i=0;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
dis[i][j]=min((double)d,sqrt((c[i].first-c[j].first)*(c[i].first-c[j].first) + (c[i].second-c[j].second)*(c[i].second-c[j].second)));
if(dis[i][j]==d)dis[i][j]=998244353.9;
}
if(i!=0)dp[i][(1<<(i-1))]=dis[0][i];
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
for(int j=1;j<=(1<<n)-1;++j)
{
for(int i=1;i<=n;++i)
{
if(!((j>>(i-1))&1))continue;
for(int k=1;k<=n;++k)
{
if(!(( j ^ ( 1<<(i-1) ) >> (k-1) ) & 1 )) continue;
dp[i][j]=min(dp[i][j],dp[k][ j ^ (1<<(i-1))]+dis[k][i]);
}
}
}
for(int i=1;i<=n;++i)ans=min(ans,dp[i][(1<<n)-1])+dis[0][i];
printf("%.2lf",ans);
return 0;
}