/*
TASK: dist
LANG: C++
*/

#include <iostream>
#include <cmath>
using namespace std;

struct point
{
	long long x,y;
}mas[5001];

long long pp[5001];

long long n;
long long l,r;
long long pl,pr;

inline long long lice(point x,point y,point t)
{
	return x.x*y.y+x.y*t.x+y.x*t.y-y.y*t.x-x.y*y.x-t.y*x.x;
}

void read()
{
	r=-1;
	l=1000000;
	cin>>n;
	cin>>mas[0].x>>mas[0].y;
	for(long long i=1;i<=n;i++)
	{
		cin>>mas[i].x>>mas[i].y;
		if(r<mas[i].x) {r=mas[i].x;pr=i;}
		if(l>mas[i].x) {l=mas[i].x;pl=i;}
	}
	pp[pl]=1;
	pp[pr]=1;
}

void us(long long a,long long b)
{
	long long max=0,p,s;
	for(long long i=1;i<=n;i++)
	{
		s=lice(mas[a],mas[b],mas[i]);
		if(max<s) {max=s;p=i;}
	}
//	cout<<a<<' '<<b<<' '<<p<<' '<<max<<endl;
	if(max!=0)
	{
		pp[p]=1;
		us(a,p);
		us(p,b);
	}
}

void ds(long long a,long long b)
{
	long long min=0,p,s;
	for(long long i=1;i<=n;i++)
	{
		s=lice(mas[a],mas[b],mas[i]);
		if(min>s) {min=s;p=i;}
	}
//	cout<<a<<' '<<b<<' '<<p<<' '<<min<<endl;
	if(min!=0)
	{
		pp[p]=1;
		ds(a,p);
		ds(p,b);
	}
}

int main()
{
	read();
	us(pl,pr);
	ds(pl,pr);
	long long min=1000000000,s;
	for(long long i=1;i<=n;i++)
	{
		if(pp[i])
		{
			s=sqrt((mas[0].x-mas[i].x)*(mas[0].x-mas[i].x)+(mas[0].y-mas[i].y)*(mas[0].y-mas[i].y));
			if(min>s) min=s;
		}
	}
	cout<<min<<endl;
	return 0;
}
