#include<bits/stdc++.h> using namespace std; #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #define int long long using ld=long double; signed main(){ int N,K;cin>>N>>K; vector<int> X(N+1),Y(N+1); for(int i=0;i<N;i++){ cin>>X[i]>>Y[i]; } X[N]=0,Y[N]=0; vector<vector<ld>> d(N+1,vector<ld>(N+1)); for(int i=0;i<=N;i++){ for(int j=0;j<=N;j++){ d[i][j]=hypotl(X[i]-X[j],Y[i]-Y[j]); } } // cout<<"!"<<endl; vector<vector<ld>> dpdp(1<<(N+1),vector<ld>(N+1,1e18)); dpdp[0][N]=0; for(int S=0;S<(1<<(N+1));S++){ for(int i=0;i<=N;i++){ for(int j=0;j<=N;j++){ if(S>>j&1)continue; dpdp[S|(1<<j)][j]=min(dpdp[S|(1<<j)][j],dpdp[S][i]+d[i][j]); } } } // for(int S=0;S<(1<<(N+1));S++){ // cout<<dpdp[S][N]<<" "; // } // cout<<endl; // cout<<"!"<<endl; vector<ld> dp(1<<N,1e18); dp[0]=0; for(int S=0;S<(1<<N);S++){ int al=(1<<N)-1; int st=al^S; int sub=st; while(sub){ if(__popcount(sub)<=K){ dp[S|sub]=min(dp[S|sub],dp[S]+dpdp[sub|(1<<N)][N]); } sub=(sub-1)&st; } } cout<<fixed<<setprecision(20)<<dp[(1<<N)-1]<<endl; }