#include <bits/stdc++.h>
#define rep(i,cc,n) for(int i=cc;i<=n;++i)
using namespace std;

struct P {
  int id, x, y;
};

int chebyshev(P p1, P p2)
{
  return max(abs(p1.x - p2.x), abs(p1.y - p2.y));
}

int main()
{
  int n;
  cin >> n;
  vector<P> v(n);
  rep(i,0,n-1)
  {
    v[i].id = i;
    cin >> v[i].x >> v[i].y;
  }

  vector<P> unsorted = v;
  vector<int> ids;
  sort(v.begin(), v.end(), [](P p1, P p2) { return p1.x > p2.x; });
  ids.push_back(v[0].id);
  ids.push_back(v[1].id);
  ids.push_back(v[n-2].id);
  ids.push_back(v[n-1].id);
  sort(v.begin(), v.end(), [](P p1, P p2) { return p1.y > p2.y; });
  ids.push_back(v[0].id);
  ids.push_back(v[1].id);
  ids.push_back(v[n-2].id);
  ids.push_back(v[n-1].id);

  sort(ids.begin(), ids.end());
  auto last = unique(ids.begin(), ids.end());
  ids.erase(last, ids.end());

  vector<int> ans;
  for (size_t i = 0; i < ids.size(); ++i)
    for (size_t j = i + 1; j < ids.size(); ++j)
      ans.push_back(chebyshev(unsorted[ids[i]], unsorted[ids[j]]));
  sort(ans.begin(), ans.end(), greater<int>());
  cout << ans[1] << endl;
  return 0;
}

#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<queue>
#include<string>
#include<unordered_map>
using namespace std;
using ll = long long;
constexpr int N = 2e5 + 5;

struct Point {
    int x;
    int y;
    int id;
}p[N];

bool cmpx(Point a, Point b) {
    return a.x < b.x;
}

bool cmpy(Point a, Point b) {
    return a.y < b.y;
}

pair<int, int> pa[N];
priority_queue<int> q;
set<pair<int, int> > st;

int main() {
	int n;
    scanf("%d", &n);
    for(int i = 1; i <= n; ++i) {
        scanf("%d%d", &p[i].x, &p[i].y);
        pa[i] = {p[i].x, p[i].y};
        p[i].id = i;
    }
    sort(p + 1, p + 1 + n, cmpx);
    for(int i = 1; i <= 2; ++i) {
        for(int t = n - 1; t <= n; ++t) {
            int a = p[i].id;
            int b = p[t].id;
            if(a > b)  swap(a, b);
            st.insert({a, b});
        }
    }
    sort(p + 1, p + 1 + n, cmpy);
    for(int i = 1; i <= 2; ++i) {
        for(int t = n - 1; t <= n; ++t) {
            int a = p[i].id;
            int b = p[t].id;
            if(a > b)  swap(a, b);
            st.insert({a, b});
        }
    }
    for(auto &tt : st) {
        int a = tt.first;
        int b = tt.second;
        q.push(max(abs(pa[a].first - pa[b].first), abs(pa[a].second - pa[b].second)));
    }
    q.pop();
    printf("%d", q.top());
    return 0;
}