/*
TASK:dist
LANG:C++
*/
#include<iostream>
#include<cmath>
using namespace std;
int n;
// Graham scan + Dist to Segment
// if n < 800 Brute Force => za sega mislq 4e e po-sigurno :P
/// ;)
struct point
{
       int x;
       int y;
       int next;
}pin[6000],tmp,p0;
int D(point a,point b,point c)
{
    return (a.x*b.y + b.x*c.y + a.y*c.x) - (a.x*c.y + a.y*b.x + b.y*c.x);  
}
int cmpsp(point a,point b)
{
    int x1 = a.x - pin[1].x;
    int y1 = a.y - pin[1].y;
    int x2 = b.x - pin[1].x;
    int y2 = b.y - pin[1].y;
    return x1*y2 - x2*y1;
}
int dot(point a,point b)
{
    return a.x*b.x + a.y*b.y;
}
void graham()
{
     sort(pin + 1,pin + n,cmpsp);
}
int dist(point A,point B)
{
    return sqrt((double)(A.x - B.x)*(A.x - B.x) + (A.y - B.y)*(A.y - B.y));
}
int p,c1,c2;
long mik = 1000000000,k;
point u,v;
void distseg(point A,point B)
{
     u.x = A.x - pin[0].x;
     u.y = A.y - pin[0].y;
     v.x = A.x - B.x;
     v.y = A.y - B.y;
     k = D(pin[0],A,B);
     c1 = dot(u,v);
     if(c1 <= 0)
     {
                 p = dist(A,pin[0]);
                 if(mik > p)
                 {
                        mik = p;
                 }
                 return;
     }
     c2 = dot(v,v);
     if(c2 <= c1)
     {
                 p = dist(B,pin[0]);
                 if(mik > p)
                 {
                        mik = p;
                 }
                 return;
     }
     if(k < 0)
     {
          k = -k;
     }
     p = (k/dist(A,B));
     if(mik > p)
     {
              mik = p;
     }
     return;
}
int main()
{
    int i;
    int minn = 1;
    scanf("%d",&n);
    scanf("%d %d",&pin[0].x,&pin[0].y);
    for(i = 1;i <= n;i++)
    {
          scanf("%d %d",&pin[i].x,&pin[i].y);
          if(pin[i].x < pin[minn].x)
          {
                      minn = i;
          }
    }
    if(n <= 654)
    {
         int j;
         for(i = 1;i <= n;i++)
         {
               for(j = i+1;j <= n;j++)
               {
                    distseg(pin[i],pin[j]);
               }
         }
         printf("%d\n",mik);
         return 0;
    }
    tmp.x = pin[1].x;
    tmp.y = pin[1].y;
    pin[1].x = pin[minn].x;
    pin[1].y = pin[minn].y;
    pin[minn].x = tmp.x;
    pin[minn].y = tmp.y;
    graham();
    for(i = 1;i < n;i++)
    {
          pin[i].next = i+1;
    }
    pin[n].next = 1;
    for(i = 0;i < n;i++)
    {
          if(D(pin[i],pin[pin[i].next],pin[pin[pin[i].next].next]) < 0)
          {
                         pin[i].next = pin[pin[i].next].next;
          }
    }
    for(i = 1;;)
    {
          if(pin[i].next == 1)
          {
                         distseg(pin[i],pin[1]);
                         printf("%d\n",mik);
                         return 0;
          }
          distseg(pin[i],pin[pin[i].next]);
          i = pin[i].next;
    }
    return 0;
}
