N,K=map(int,input().split()) X,Y=[],[] for i in range(N): x,y=map(int,input().split()) X.append(x) Y.append(y) def dist(i,j): if j==-1: i,j=j,i if i==-1: return (X[j]**2+Y[j]**2)**.5 return ((X[i]-X[j])**2+(Y[i]-Y[j])**2)**.5 inf=1e20 dp=[[inf]*N for bit in range(1<<N)] for bit in range(1<<N): for n in range(N): if bit&1<<n: if bit==1<<n: dp[bit][n]=min(dp[bit][n],dist(-1,n)) else: for m in range(N): if n==m: continue if not bit&1<<m: continue dp[bit][n]=min(dp[bit][n],dp[bit^1<<n][m]+dist(n,m)) DP=[inf]*(1<<N) for bit in range(1<<N): for n in range(N): DP[bit]=min(DP[bit],dp[bit][n]+dist(n,-1)) DP[0]=0 dp=DP DP=[inf]*(1<<N) DP[0]=0 for bit in range(1<<N): subset=bit while subset: if subset.bit_count()<=K: DP[bit]=min(DP[bit],DP[subset^bit]+dp[subset]) subset-=1 subset&=bit ans=DP[-1] print(ans)