#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
struct tree {
  int lt, rt;
  long long ma, mi;
} a[N * 4];
struct point {
  long long x, y;
  friend bool operator<(const point &p, const point &q) { return p.x < q.x; }
} c[N];
void init(int lt, int rt, int step) {
  a[step].lt = lt;
  a[step].rt = rt;
  if (lt == rt) {
    a[step].ma = a[step].mi = c[lt].y;
    return;
  }
  int mid = (lt + rt) / 2;
  init(lt, mid, 2 * step);
  init(mid + 1, rt, 2 * step + 1);
  a[step].ma = max(a[2 * step].ma, a[2 * step + 1].ma);
  a[step].mi = min(a[2 * step].mi, a[2 * step + 1].mi);
}
void query(int lt, int rt, int step, long long &ma, long long &mi) {
  if (a[step].lt == lt && a[step].rt == rt) {
    ma = a[step].ma;
    mi = a[step].mi;
    return;
  }
  if (rt <= a[2 * step].rt)
    query(lt, rt, 2 * step, ma, mi);
  else if (lt > a[2 * step].rt)
    query(lt, rt, 2 * step + 1, ma, mi);
  else {
    long long ma1, ma2, mi1, mi2;
    query(lt, a[2 * step].rt, 2 * step, ma1, mi1);
    query(a[2 * step + 1].lt, rt, 2 * step + 1, ma2, mi2);
    ma = max(ma1, ma2);
    mi = min(mi1, mi2);
  }
}
bool check(long long m, int n) {
  for (int i = 1; i <= n; i++) {
    int lt = 1, rt = i, mid, x = -1, y = -1;
    while (lt <= rt) {
      mid = (lt + rt) / 2;
      if (c[mid].x < c[i].x - m) {
        x = mid;
        lt = mid + 1;
      } else
        rt = mid - 1;
    }
    if (i < n) y = i + 1;
    if (x == -1 && y == -1) return true;
    if (x != -1 && y != -1) {
      long long ma1, ma2, ma, mi1, mi2, mi;
      query(1, x, 1, ma1, mi1);
      query(y, n, 1, ma2, mi2);
      ma = max(ma1, ma2);
      mi = min(mi1, mi2);
      if (ma - mi <= m) return true;
    } else if (x == -1) {
      long long ma, mi;
      query(y, n, 1, ma, mi);
      if (ma - mi <= m) return true;
    } else if (y == -1) {
      long long ma, mi;
      query(1, x, 1, ma, mi);
      if (ma - mi <= m) return true;
    }
  }
  return false;
}
int main() {
  int x, y;
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &x, &y);
    c[i].x = x - y;
    c[i].y = x + y;
  }
  sort(c + 1, c + n + 1);
  init(1, n, 1);
  long long lt = 0, rt = 1LL << 32, mid, ans = 0;
  while (lt <= rt) {
    mid = (lt + rt) / 2;
    if (check(mid, n)) {
      rt = mid - 1;
      ans = mid;
    } else
      lt = mid + 1;
  }
  printf("%.20lf\n", ans / 2.0);
  return 0;
}
