#include <fstream>
#include <cstring>
#include <cstdlib>
#define In "patrate.in"
#define Out "patrate.out"
#define Nmax 50013
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std ;
struct point
{
int x,y;
};
int xmax,xmin, ymax, ymin;
point a[Nmax];
bool Deleted[Nmax];
int n, sol;
char *buffer;
inline void Read(int &x)
{
while(*buffer<'0' || '9' < *buffer )buffer++;
x = 0;
while('0'<=*buffer && *buffer <='9')
x = x*10+*buffer-'0',buffer++;
}
inline void Init_Buffer()
{
ifstream fin(In);
fin.seekg(0,ios::end);
int fs = fin.tellg();
buffer = (char*)malloc(fs);
fin.seekg(0,ios::beg);
fin.getline(buffer,fs,0);
fin.close();
}
inline void Read()
{
Read(n);
xmin = ymin = Nmax;
for(int i = 1;i <= n; ++i)
Read(a[i].x),Read(a[i].y),
xmax = max(xmax,a[i].x),
ymax = max(ymax,a[i].y),
xmin = min(xmin,a[i].x),
ymin = min(ymin,a[i].y);
}
inline void Change(const bool flag,int &newxmax,int &newxmin,int &newymax,int &newymin,const int Xmin,const int Ymin,const int Xmax,const int Ymax)
{
newxmax = 0,newxmin = Nmax,newymax = 0,newymin = Nmax;
int i;
for(i = 1;i <= n; ++i)
{
if(flag==1)
Deleted[i] = 0;
if(!Deleted[i])
{
if(Xmin <= a[i].x && a[i].x <= Xmax && Ymin <= a[i].y && a[i].y <= Ymax)
Deleted[i] = 1;
else
newxmax = max(newxmax,a[i].x),
newymax = max(newymax,a[i].y),
newxmin = min(newxmin,a[i].x),
newymin = min(newymin,a[i].y);
}
}
}
inline bool Verif(const int k)
{
int newxmax, newxmin, newymax, newymin;
int xxmax, xxmin, yymax, yymin;
Change(1,newxmax,newxmin,newymax,newymin,xmax-k,ymin,xmax,ymin+k);
Change(0,xxmax,xxmin,yymax,yymin,newxmin,newymin,newxmin+k,newymin+k);
if(yymax-yymin<=k && xxmax-xxmin<=k) return true;
Change(1,newxmax,newxmin,newymax,newymin,xmax-k,ymin,xmax,ymin+k);
Change(0,xxmax,xxmin,yymax,yymin,newxmin,newymax-k,newxmin+k,newymax);
if(yymax-yymin<=k && xxmax-xxmin<=k) return true;
Change(1,newxmax,newxmin,newymax,newymin,xmax-k,ymin,xmax,ymin+k);
Change(0,xxmax,xxmin,yymax,yymin,newxmax-k,newymax-k,newxmax,newymax);
if(yymax-yymin<=k && xxmax-xxmin<=k) return true;
Change(1,newxmax,newxmin,newymax,newymin,xmax-k,ymin,xmax,ymin+k);
Change(0,xxmax,xxmin,yymax,yymin,newxmax-k,newymin,newxmax,newymin+k);
if(yymax-yymin<=k && xxmax-xxmin<=k) return true;
Change(1,newxmax,newxmin,newymax,newymin,xmax-k,ymax-k,xmax,ymax);
Change(0,xxmax,xxmin,yymax,yymin,newxmin,newymin,newxmin+k,newymin+k);
if(yymax-yymin<=k && xxmax-xxmin<=k) return true;
Change(1,newxmax,newxmin,newymax,newymin,xmax-k,ymax-k,xmax,ymax);
Change(0,xxmax,xxmin,yymax,yymin,newxmin,newymax-k,newxmin+k,newymax);
if(yymax-yymin<=k && xxmax-xxmin<=k) return true;
Change(1,newxmax,newxmin,newymax,newymin,xmax-k,ymax-k,xmax,ymax);
Change(0,xxmax,xxmin,yymax,yymin,newxmax-k,newymax-k,newxmax,newymax);
if(yymax-yymin<=k && xxmax-xxmin<=k) return true;
Change(1,newxmax,newxmin,newymax,newymin,xmax-k,ymax-k,xmax,ymax);
Change(0,xxmax,xxmin,yymax,yymin,newxmax-k,newymin,newxmax,newymin+k);
if(yymax-yymin<=k && xxmax-xxmin<=k) return true;
Change(1,newxmax,newxmin,newymax,newymin,xmin,ymin,xmin+k,ymin+k);
Change(0,xxmax,xxmin,yymax,yymin,newxmin,newymin,newxmin+k,newymin+k);
if(yymax-yymin<=k && xxmax-xxmin<=k) return true;
Change(1,newxmax,newxmin,newymax,newymin,xmin,ymin,xmin+k,ymin+k);
Change(0,xxmax,xxmin,yymax,yymin,newxmin,newymax-k,newxmin+k,newymax);
if(yymax-yymin<=k && xxmax-xxmin<=k) return true;
Change(1,newxmax,newxmin,newymax,newymin,xmin,ymin,xmin+k,ymin+k);
Change(0,xxmax,xxmin,yymax,yymin,newxmax-k,newymax-k,newxmax,newymax);
if(yymax-yymin<=k && xxmax-xxmin<=k) return true;
Change(1,newxmax,newxmin,newymax,newymin,xmin,ymax-k,xmin+k,ymax);
Change(0,xxmax,xxmin,yymax,yymin,newxmin,newymin,newxmin+k,newymin+k);
if(yymax-yymin<=k && xxmax-xxmin<=k) return true;
return 0;
}
inline void Solve()
{
int Left = 1,Right = max(xmax-xmin,ymax-ymin), Middle;
while(Left <= Right)
{
Middle = (Left+Right)>>1;
if(Verif(Middle))
sol = Middle,
Right = Middle - 1;
else
Left = Middle + 1;
}
}
inline void Write()
{
ofstream g(Out);
g<<sol<<"\n";
g.close();
}
int main()
{
Init_Buffer();
Read();
if(n>3)
Solve();
else
sol = 0;
Write();
return 0;
}