#include <cstdio>
using namespace std;
int que[50]={0},inf[50][2]={{0}},map[50][50]={{0}};
//bool used[50]={false};
int absint(int a)
{
if (a<0)
return(-a);
else
return(a);
}
void swap(int& a,int& b)
{
int temp;
temp=a;
a=b;
b=temp;
}
int main(void)
{
freopen("ppg.in","r",stdin);
freopen("ppg.out","w",stdout);
int i,j,n,now,temp,tempj/*,usednum=1*/,maxnum=0;
scanf("%d\n",&n);
for (i=0;i<n;i++)
{
scanf("%d %d\n",&inf[i][0],&inf[i][1]);
for (j=i-1;j>=0;j--)
{
temp=(absint(inf[i][0]-inf[j][0])+absint(inf[i][1]-inf[j][1])+1)/2;
if (temp<map[i][j]||map[i][j]==0)
{
map[i][j]=temp;
map[j][i]=temp;
}
}
}
for (i=0;i<n;i++)
que[i]=i;
// used[0]=true;
for (now=0;now<n-1;now++)
{
temp=2000000000;
for (i=0;i<=now;i++)
for (j=now+1;j<n;j++)
if (map[que[i]][que[j]]<temp)
{
temp=map[que[i]][que[j]];
tempj=j;
}
swap(que[now+1],que[tempj]);
if (temp>maxnum)
maxnum=temp;
}
printf("%d\n",maxnum);
/* temp=0;
for (i=0;i<n;i++)
for (j=i+1;j<n;j++)
if (temp<map[i][j])
temp=map[i][j];*/
fclose(stdin);
fclose(stdout);
return(0);
}