#include <bits/stdc++.h>
using namespace std;
    pair<long long, long long> A[2000];
    long long mod(long long x){
        if(x<0)return -x;
        return x;
    }
    long long used[2000], used2[2000];
    vector<long long> graf[2000], chisla;
    queue<long long> q;
    void dfs(long long x){
        used[x]=1;
        chisla.push_back(x);
        for (int i=0; i<graf[x].size(); i++){
            if (used[graf[x][i]]==0){
                dfs(graf[x][i]);
            }
        }
    }
    void bfs(long long x){
        used2[x]=0;
        int t=0;
        q.push(x);
        while(!q.empty()){
            int p=q.front();
            for (int i=0; i<graf[p].size(); i++){
                t=mod(A[p].first-A[graf[p][i]].first)+mod(A[p].second-A[graf[p][i]].second);
                if (used2[graf[p][i]]==-1 or used2[graf[p][i]]>used2[p]+t){
                    used2[graf[p][i]]=used2[p]+t;
                    q.push(graf[p][i]);
                }
            }
            q.pop();
        }
    }
int main (){
ios_base::sync_with_stdio();
cin.tie(0);
cout.tie(0);
    long long n;
    cin >> n;
    long long i, max_l=0, t, j;
    for (i=0; i<n; i++){
        cin >> A[i].first >> A[i].second;
    }
    for (i=0; i<n-1; i++){
        for (j=i+1; j<n; j++){
            if (A[i].first==A[j].first or A[i].second==A[j].second){
                graf[i].push_back(j);
                graf[j].push_back(i);
            }
        }
    }
    for(i=0; i<2000; i++){used2[i]=-1;}
    for (i=0; i<n; i++){
        if (used[i]==0){
            dfs(i);
            for (j=0; j<chisla.size(); j++){
                bfs(chisla[j]);
                for (t=j+1; t<chisla.size(); t++){
                    if (used2[chisla[t]]>max_l){
                        max_l=used2[chisla[t]];
                    }
                    used2[chisla[t]]=-1;
                }
            }
            chisla.clear();
        }
    }
    cout << max_l << endl;
return 0;
}
