#include <bits/stdc++.h>
using namespace std;
int x[500500], y[500500];
long long minl[500500], maxl[500500], minr[500500], maxr[500500], ll, rr;
int n;
pair<long long, long long> a[500500];
bool ok(long long M) {
  int j = 0;
  for (int i = 0; i < n; i++) {
    while ((j < n) && (a[j].first - a[i].first <= M)) j++;
    if (max((i > 0) ? maxl[i - 1] : -10000000000LL,
            (j < n) ? maxr[j] : -10000000000LL) -
            min((i > 0) ? minl[i - 1] : 10000000000LL,
                (j < n) ? minr[j] : 10000000000LL) <=
        M)
      return 1;
  }
  return 0;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d%d", &x[i], &y[i]);
  for (int i = 0; i < n; i++) a[i] = make_pair(x[i] - y[i], x[i] + y[i]);
  sort(a, a + n);
  for (int i = 0; i < n; i++) {
    minl[i] = min((i > 0) ? minl[i - 1] : 10000000000LL, a[i].second);
    maxl[i] = max((i > 0) ? maxl[i - 1] : -10000000000LL, a[i].second);
  }
  for (int i = n - 1; i >= 0; i--) {
    minr[i] = min((i + 1 < n) ? minr[i + 1] : 10000000000LL, a[i].second);
    maxr[i] = max((i + 1 < n) ? maxr[i + 1] : -10000000000LL, a[i].second);
  }
  ll = 0;
  rr = 3e9;
  for (int it = 0; it < 40; it++)
    if (ok((ll + rr) / 2))
      rr = (ll + rr) / 2;
    else
      ll = (ll + rr) / 2;
  if (!ok(ll)) ll = rr;
  printf("%.10lf\n", ll * 1.0 / 2);
}
