#include <bits/stdc++.h>
using namespace std;
int n;
long long lmaxy[100010], lminy[100010];
long long rmaxy[100010], rminy[100010];
pair<long long, long long> pts[100010];
bool check(long long R) {
  int ps = 0;
  for (int i = 0; i < (n); i++) {
    long long miny = 2e9, maxy = -2e9;
    if (i > 0) {
      miny = min(miny, lminy[i - 1]);
      maxy = max(maxy, lmaxy[i - 1]);
    }
    while (ps < n && pts[ps].first - pts[i].first <= R) ++ps;
    if (ps < n) {
      miny = min(miny, rminy[ps]);
      maxy = max(maxy, rmaxy[ps]);
    }
    if (maxy - miny <= R) return true;
  }
  return false;
}
int main() {
  while (~scanf("%d", &n)) {
    for (int i = 0; i < (n); i++) {
      long long x, y;
      scanf("%I64d%I64d", &x, &y);
      pts[i] = make_pair(x - y, x + y);
    }
    sort(pts, pts + n);
    lmaxy[0] = lminy[0] = pts[0].second;
    for (int i = 1; i < n; ++i) {
      lmaxy[i] = max(lmaxy[i - 1], pts[i].second);
      lminy[i] = min(lminy[i - 1], pts[i].second);
    }
    rmaxy[n - 1] = rminy[n - 1] = pts[n - 1].second;
    for (int i = n - 2; i >= 0; --i) {
      rmaxy[i] = max(rmaxy[i + 1], pts[i].second);
      rminy[i] = min(rminy[i + 1], pts[i].second);
    }
    long long st = 0, ed = 4ll * 1e9;
    while (st <= ed) {
      long long mid = st + ed >> 1;
      if (check(mid)) {
        ed = mid - 1;
      } else {
        st = mid + 1;
      }
    }
    printf("%.15f\n", st * 0.5);
  }
  return 0;
}
