#include <bits/stdc++.h>
using namespace std;
const unsigned int INF = 4e9;
unsigned int r, l;
unsigned int n;
unsigned int x[101000];
unsigned int y[101000];
pair<unsigned int, unsigned int> p[101000];
unsigned int i;
unsigned int hi, lo;
unsigned int d2;
unsigned int maxy, miny;
unsigned int hil[101000];
unsigned int hir[101000];
unsigned int lol[101000];
unsigned int lor[101000];
void flip() {
  for ((i) = (0); (i) < (n); (i)++) {
    r = x[i] + y[i] + 2e9;
    l = -x[i] + y[i] + 2e9;
    x[i] = r;
    y[i] = l;
  }
}
inline unsigned int check() {
  r = 0;
  for ((l) = (0); (l) < (n); (l)++) {
    while (r < n && x[r] - x[l] <= d2) r++;
    maxy = max(hil[l], hir[r]);
    miny = min(lol[l], lor[r]);
    if (maxy < miny || maxy - miny <= d2) return 1;
  }
  return 0;
}
int main() {
  scanf("%u", &n);
  ;
  for ((i) = (0); (i) < (n); (i)++) scanf("%u%u", &x[i], &y[i]);
  flip();
  for ((i) = (0); (i) < (n); (i)++) p[i] = make_pair((x[i]), (y[i]));
  sort(p, p + n);
  for ((i) = (0); (i) < (n); (i)++) {
    x[i] = p[i].first;
    y[i] = p[i].second;
  }
  hil[0] = 0;
  lol[0] = INF;
  for ((i) = (1); (i) < (n + 1); (i)++) {
    hil[i] = max(hil[i - 1], y[i - 1]);
    lol[i] = min(lol[i - 1], y[i - 1]);
  }
  hir[n] = 0;
  lor[n] = INF;
  for (int i = n - 1; i >= 0; i--) {
    hir[i] = max(hir[i + 1], y[i]);
    lor[i] = min(lor[i + 1], y[i]);
  }
  lo = -1;
  hi = 4e9;
  while (hi - lo > 1) {
    d2 = (hi + lo) / 2;
    if (check())
      hi = d2;
    else
      lo = d2;
  }
  printf("%.12lf\n", ((double)(hi)) / 2.0);
  return 0;
}
