program spfa;
type
point=^node;
node=record
y:longint;
z:real;
next:point;
end;
jj=record
x,y:longint;
end;
var
i,j,n,m,s,t,x,y:longint;
dist:array[0..100] of real;
v:array[0..100] of boolean;
a:array[0..100] of point;
b:array[0..100] of jj;
q:array[0..1000000] of longint;
procedure insert;
var
p:point;
begin
new(p); p^.y:=y; p^.z:=sqrt(sqr(b[x].x-b[y].x)+sqr(b[x].y-b[y].y)); p^.next:=a[x]; a[x]:=p;
new(p); p^.y:=x; p^.z:=sqrt(sqr(b[x].x-b[y].x)+sqr(b[x].y-b[y].y)); p^.next:=a[y]; a[y]:=p;
end;
procedure spfa;
var
head,tail,x,y:longint;
z:real;
p:point;
begin
head:=0; tail:=1; q[1]:=s; v[s]:=true; dist[s]:=0;
while head<tail do
begin
inc(head);
x:=q[head];
p:=a[x];
while p<>nil do
begin
y:=p^.y;
z:=p^.z;
if dist[y]>dist[x]+z then
begin
dist[y]:=dist[x]+z;
if not v[y] then
begin
v[y]:=true;
inc(tail);
q[tail]:=y;
end;
end;
p:=p^.next;
end;
v[x]:=false;
end;
end;
begin
readln(n);
for i:=1 to n do
readln(b[i].x,b[i].y);
readln(m);
for i:=1 to n do
dist[i]:=9999999;
for i:=1 to m do
begin
readln(x,y);
insert;
end;
readln(s,t);
spfa;
writeln(dist[t]:0:2);
end.
/**************************************************************
Problem: 2049
User: admin
Language: Pascal
Result: Wrong Answer
****************************************************************/