#include<bits/stdc++.h>
using namespace std;
int ans,n,s,t,m;
double g[101][101];
struct node
{
int a,b;
}last[101];
double sqr(double a)
{return a*a;}
void dij()
{
double lost[10001],min;
int mini;
bool b[10001];
memset(lost,0x7f,sizeof(lost));
memset(b,1,sizeof(b));
lost[s]=0;
while(true)
{
min=INT_MAX;
for(int i=1;i<=n;i++)
if(b[i]&&lost[i]<min)
{
min=lost[i];
mini=i;
}
if(min==INT_MAX)break;
b[mini]=false;
for(int i=1;i<=n;i++)
if(b[i]&&g[mini][i]+lost[mini]<lost[i])
lost[i]=g[mini][i]+lost[mini];
}
printf("%.2f\n",lost[t]);
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
scanf("%d%d",&last[i].a,&last[i].b);
cin>>m;
memset(g,0x7f,sizeof(g));
for(int i=1,x,y; i<=m; i++)
{
scanf("%d%d",&x,&y);
g[x][y]=sqrt(sqr((last[x].a-last[y].a))+sqr((last[x].blast[y].b)));
g[y][x]=g[x][y];
}
cin>>s>>t;
dij();
return 0;
}