(problem)
#ifdef Dubug
#endif
#include <bits/stdc++.h>
using namespace std;
typedef long long LL ;
inline LL In() { LL res(0),f(1); register char c ;
while(isspace(c=getchar())) ; c == '-'? f = -1 , c = getchar() : 0 ;
while(res = (res << 1) + (res << 3) + (c & 15) , isdigit(c=getchar())) ;
return res * f ;
}
int n , m ;
const int N = 100 + 5 ;
struct node{
int x ;
int y ;
};
node a[N] ;
double dis[N][N] ;
inline double d(int x,int y,int xx,int yy) {
return sqrt(pow((x-xx),2)+pow((y-yy),2)) ;
}
signed main() {
memset(dis,0x7f,sizeof(dis)) ;
n = In() ;
for(register int i=1;i<=n;i++) {
int x , y ;
x = In() , y = In() ;
a[i] = node{x,y} ;
}
m = In() ;
for(register int i=1;i<=m;i++) {
int u , v ;
u = In() , v = In() ;
dis[u][v] = dis[v][u] = d(a[u].x,a[u].y,a[v].x,a[v].y) ;
}
for(register int k=1;k<=n;k++)
for(register int i=1;i<=n;i++)
for(register int j=1;j<=n;j++) dis[i][j] = min(dis[i][j],dis[i][k]+dis[k][j]) ;
int s , t ;
s = In() , t = In() ;
cout << fixed << setprecision(2) << dis[s][t] << endl ;
return 0 ;
}