#include<bits/stdc++.h>
const int maxn=100001;
const double inf=100000000;
inline const void read(double&a)
{
a=0;
char c=getchar();
while(c<'0'||c>'9')c=getchar();
while(c>='0'&&c<='9')
{
a=a*10+c-'0';
c=getchar();
}
}
struct puma
{
double t,v;
}p[maxn];
int slow=0,fast=99999,back=0,front=99999;
double tt;
inline const double dis(int i,double t)
{
return p[i].v*(t-p[i].t);
}
inline const double gettime(int a,int b)
{
return (p[a].v*p[a].t-p[b].v*p[b].t)/(p[a].v-p[b].v);
}
int main()
{
int n;
std::cin>>n;
p[back].t=0;p[front].t=inf;p[slow].v=inf;p[fast].v=0;
for(int i=1;i<=n;i++)
{
read(p[i].t);read(p[i].v);
if(p[i].t>p[back].t)back=i;if(p[i].t<p[front].t)front=i;
if(p[i].v<p[slow].v)slow=i;if(p[i].v>p[fast].v)fast=i;
}
double ans=inf;
tt=p[back].t;
while(true)
{
if((fast==front)&&(slow==back))break;
ans=std::min(ans,dis(front,tt)-dis(back,tt));
double get=inf,take=inf;
double over=back,caught=front,newtt;
for(int i=1;i<=n;i++)
{
if(i!=back)
{
double t=gettime(back,i);
if(t>tt&&p[i].v<p[back].v&&t<get){get=t;over=i;}
}
if(i!=front)
{
double t=gettime(front,i);
if(t>tt&&p[i].v>p[front].v&&t<take){take=t;caught=i;}
}
}
newtt=std::min(take,get);
ans=std::min(ans,dis(front,newtt)-dis(back,newtt));
if(get<take){back=over;tt=newtt;continue;}
else{front=caught;tt=newtt;continue;}
}
printf("%.2llf",ans);
return 0;
}