#include <bits/stdc++.h>
using namespace std;
struct NN {
  long long x, y;
} nn[110000];
int cmp(NN a, NN b) { return a.x < b.x; }
long long xl[110000], xr[110000];
long long dl[110000], dr[110000];
int jud(int n, long long d) {
  int l = 1, r = 1, i, j;
  long long p;
  for (i = 1; i <= n; i++) {
    p = nn[i].x + d;
    while (p - nn[l].x > d) l++;
    while (r < n && nn[r + 1].x - p <= d) r++;
    if (max(dl[l - 1], dr[r + 1]) - min(xl[l - 1], xr[r + 1]) <= d * 2)
      return 1;
  }
  return 0;
}
int main() {
  int n, i, j;
  cin >> n;
  long long tx, ty;
  for (i = 1; i <= n; i++) {
    cin >> nn[i].x >> nn[i].y;
    nn[i].x *= 2, nn[i].y *= 2;
    tx = -nn[i].x - nn[i].y;
    ty = nn[i].x - nn[i].y;
    nn[i].x = tx, nn[i].y = ty;
  }
  sort(nn + 1, nn + 1 + n, cmp);
  long long l = 0, r = 21000000000ll, mid;
  dl[0] = dr[n + 1] = -2100000000 * 10ll;
  xl[0] = xr[n + 1] = 2100000000 * 10ll;
  for (i = 1; i <= n; i++) {
    dl[i] = max(dl[i - 1], nn[i].y);
    xl[i] = min(xl[i - 1], nn[i].y);
  }
  for (i = n; i >= 1; i--) {
    dr[i] = max(dr[i + 1], nn[i].y);
    xr[i] = min(xr[i + 1], nn[i].y);
  }
  while (l < r) {
    mid = (l + r) / 2;
    if (!jud(n, mid))
      l = mid + 1;
    else
      r = mid;
  }
  printf("%.12lf\n", l / 2.0);
}
