P1215 WA
{$N+}
program Exactness_Of_Projectile_Hit;
const GMT=maxLongInt;
type point=record
X:LongInt;
Y:LongInt;
end;
line=record
A:real;
B:real;
C:real;
end;
var Points:array[1..102] of point;
Lines:array[1..102] of line;
ans,AB,BC,AC,X,X1,Y1,X2,Y2:extended;
N,i:LongInt;
dop,dop1,Xv,Yv:extended;
plus,minus:boolean;
procedure Quit;
begin
writeln(0);
halt;
end;
function min(a,b:extended):extended;
begin
if a>b then
min:=b else
min:=a;
end;
function dist(a,b,c,d:extended):extended;
begin
dop:=sqr(a-b);
dop1:=sqr(c-d);
dist:=sqrt(dop+dop1);
end;
begin
ans:=GMT;
readln(Xv,Yv,N);
for i:=1 to N do
readln(Points[i].X,Points[i].Y);
{Checking if (Xv;Yv) is inside}
Points[N+1]:=Points[1];
for i:=1 to N do
begin
Lines[i].A:=Points[i+1].y-Points[i].y;
Lines[i].B:=Points[i].x-Points[i+1].x;
Lines[i].C:=Points[i].x*Points[i+1].y-Points[i].y*Points
[i+1].x;
end;
plus:=false;
minus:=false;
for i:=1 to N do
begin
if Lines[i].A*Xv+Lines[i].B*Yv>Lines[i].C then
plus:=true else
if Lines[i].A*Xv+Lines[i].B*Yv<Lines[i].C then
minus:=true;
end;
if not (plus and minus) then
Quit else
{Counting the distance}
begin
for i:=1 to N do
begin
X1:=Points[i].x;
X2:=Points[i+1].x;
Y1:=Points[i].Y;
Y2:=Points[i+1].Y;
AB:=dist(x1,x2,y1,y2);
BC:=dist(Xv,x2,Yv,Y2);
AC:=dist(Xv,X1,Yv,Y1);
X:=(sqr(AC)-sqr(BC)-sqr(AB))/(-2*AB);
if (X>=0) and (x<=AB) then
ans:=min(ans,sqrt(sqr(BC)-sqr(X)));
end;
for i:=1 to N do
begin
X1:=Points[i].X;
Y1:=Points[i].Y;
ans:=min(ans,dist(X1,Xv,Y1,Yv));
end;
end;
writeln(ans*2:0:3);
end.