#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<queue>
#define maxn 1010
using namespace std;
int n,b1,b2,pre[maxn];
double x[maxn],y[maxn],dis[maxn][maxn],d[maxn];
double ans=1000000000000000000;
bool vis[maxn],v[maxn];
double Calc(double a1,double b1,double a2,double b2){
double res;
res=sqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2));
return res;
}
void dfs(int pos,double sum){
if(sum>=ans)return;
if(x[pos]>x[b1]&&vis[b1]==0)return;
if(pos==n){
int p=n;
for(int i=n;i>=1;i--){
if(!vis[i]){
sum+=dis[i][p];
p=i;
if(sum>=ans)return;
}
}
ans=min(ans,sum);
return;
}
for(int i=pos+1;i<=n;i++){
if(i==b2)continue;
if(i==b1){
vis[i]=1;
dfs(i,sum+dis[pos][i]);
vis[i]=0;
break;
}
vis[i]=1;
dfs(i,sum+dis[pos][i]);
vis[i]=0;
}
}
struct node{
double v;
int id;
bool operator < (const node x)const{
return v>x.v;
}
};
node make_node(double v,int id){
node res;res.v=v;res.id=id;
return res;
}
double Dij1(){
priority_queue<node>q;
q.push(make_node(0,1));
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)d[i]=1000000000;
d[1]=0;
while(!q.empty()){
node now=q.top();q.pop();
if(vis[now.id])continue;
vis[now.id]=1;
for(int i=now.id+1;i<=n;i++){
if(i>b1)break;
if(d[i]>d[now.id]+dis[now.id][i]){
d[i]=d[now.id]+dis[now.id][i];
q.push(make_node(d[i],i));
pre[i]=now.id;
}
}
}
}
double Dij2(){
priority_queue<node>q;
q.push(make_node(d[b1],b1));
vis[b1]=0;
while(!q.empty()){
node now=q.top();q.pop();
if(vis[now.id])continue;
vis[now.id]=1;
for(int i=now.id+1;i<=n;i++){
if(d[i]>d[now.id]+dis[now.id][i]){
d[i]=d[now.id]+dis[now.id][i];
q.push(make_node(d[i],i));
pre[i]=now.id;
}
}
}
double res=0;
int now=n;
while(now){
v[now]=1;
res+=dis[now][pre[now]];
now=pre[now];
}
v[1]=0;
int p=n;
for(int i=n;i>=1;i--){
if(!v[i]){
res+=dis[i][p];
p=i;
}
}
return res;
}
int main(){
freopen("paths.in","r",stdin);freopen("paths.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d%d%d",&n,&b1,&b2);
b1++;b2++;
for(int i=1;i<=n;i++)scanf("%lf%lf",&x[i],&y[i]);
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++){
double d=Calc(x[i],y[i],x[j],y[j]);
dis[i][j]=dis[j][i]=d;
}
if(n<=20){//爆搜
dfs(1,0);
printf("%.2lf",ans);
return 0;
}
else{//贪心
double ans1=0,ans2=0;
memset(v,0,sizeof(v));
Dij1();
ans1=Dij2();
printf("%.2lf",ans1);
}
}