#include <bits/stdc++.h>
using namespace std;
const long long inf = 2000000002;
pair<long long, long long> p[100005];
long long minl[100005], maxl[100005], minr[100005], maxr[100005];
int main() {
  int i, j, n, a, b;
  while (~scanf("%d", &n)) {
    for (i = 0; i < n; i++) {
      scanf("%d%d", &a, &b);
      p[i] = make_pair(a - b, a + b);
    }
    sort(p, p + n);
    minl[0] = maxl[0] = p[0].second;
    for (i = 1; i < n; i++)
      minl[i] = min(minl[i - 1], p[i].second),
      maxl[i] = max(maxl[i - 1], p[i].second);
    minr[n - 1] = maxr[n - 1] = p[n - 1].second;
    for (i = n - 2; i >= 0; i--)
      minr[i] = min(minr[i + 1], p[i].second),
      maxr[i] = max(maxr[i + 1], p[i].second);
    long long l = 0, r = 4 * inf;
    while (l < r) {
      long long s = (l + r) / 2;
      bool can = 0;
      j = 0;
      for (i = 0; i < n; i++) {
        while (j < n - 1 && p[j + 1].first - p[i].first <= s) j++;
        if (i == 0 && j == n - 1) {
          can = true;
          break;
        }
        long long miny = inf, maxy = -inf;
        if (i > 0) miny = min(minl[i - 1], miny), maxy = max(maxl[i - 1], maxy);
        if (j < n - 1)
          miny = min(miny, minr[j + 1]), maxy = max(maxr[j + 1], maxy);
        if (maxy - miny <= s) can = true;
        if (can) break;
      }
      if (can)
        r = s;
      else
        l = s + 1;
    }
    double t = l * 0.5;
    printf("%.8lf\n", t);
  }
  return 0;
}
