#include using namespace std; template inline bool chmin(T &a, const U &b) { return a > b ? a = b, true : false; } template inline bool chmax(T &a, const U &b) { return a < b ? a = b, true : false; } const int inf = 1e9; void main_() { int n; cin >> n; vector x(n), y(n); int max_x = -inf, min_x = inf, max_y = -inf, min_y = inf; for(int i = 0; i < n; i++){ cin >> x[i] >> y[i]; chmax(max_x,x[i]); chmin(min_x,x[i]); chmax(max_y,y[i]); chmin(min_y,y[i]); } if(max_y - min_y > max_x - min_x)swap(x,y); vector> p(n); for(int i = 0; i < n; i++){ p[i].first = x[i] + y[i]; p[i].second = x[i] - y[i]; } sort(p.begin(),p.end()); int le = -1, ri = p[n-1].first - p[0].first; while(ri - le > 1){ int mid = (ri + le) / 2; bool ex = false; int y1 = p[0].second; for(int i = 0; i < n; i++){ if(p[i].first <= p[0].first + mid)chmax(y1,p[i].second); } int max_qx = -inf, min_qx = inf, max_qy = -inf, min_qy = inf; for(int i = 0; i < n; i++){ if(p[i].first > p[0].first + mid || (p[i].second < y1 - mid || p[i].second > y1)){ chmax(max_qx,p[i].first); chmin(min_qx,p[i].first); chmax(max_qy,p[i].second); chmin(min_qy,p[i].second); } } if(max_qx - min_qx <= mid && max_qy - min_qy <= mid)ex = true; int y2 = p[0].second; for(int i = 0; i < n; i++){ if(p[i].first <= p[0].first + mid)chmin(y1,p[i].second); } max_qx = -inf, min_qx = inf, max_qy = -inf, min_qy = inf; for(int i = 0; i < n; i++){ if(p[i].first > p[0].first + mid || (p[i].second < y2 || p[i].second > y2 + mid)){ chmax(max_qx,p[i].first); chmin(min_qx,p[i].first); chmax(max_qy,p[i].second); chmin(min_qy,p[i].second); } } if(max_qx - min_qx <= mid && max_qy - min_qy <= mid)ex = true; if(ex)ri = mid; else le = mid; } cout << ri << endl; }; int main() { int t = 1; // cin >> t; while(t--) main_(); return 0; }