#include <bits/stdc++.h>
using namespace std;
int n;
pair<long long, long long> a[100005];
long long pymax[100005], pymin[100005];
long long symax[100005], symin[100005];
bool trial(long long x) {
  for (int i = 0; i < n; i++) {
    symax[i] = pymax[i] = a[i].second - x;
    symin[i] = pymin[i] = a[i].second + x;
  }
  for (int i = 1; i < n; i++) {
    pymax[i] = max(pymax[i], pymax[i - 1]);
    pymin[i] = min(pymin[i], pymin[i - 1]);
  }
  for (int i = n - 2; i >= 0; i--) {
    symax[i] = max(symax[i], symax[i + 1]);
    symin[i] = min(symin[i], symin[i + 1]);
  }
  int e = 0;
  for (int i = 0; i < n; i++) {
    while (e < n && a[e].first <= a[i].first + x * 2) {
      e++;
    }
    long long maxv = -1e18, minv = 1e18;
    if (i) maxv = max(maxv, pymax[i - 1]), minv = min(minv, pymin[i - 1]);
    if (e < n) maxv = max(maxv, symax[e]), minv = min(minv, symin[e]);
    if (maxv <= minv) {
      return 1;
    }
  }
  return 0;
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    int x, y;
    scanf("%d %d", &x, &y);
    a[i] = pair<long long, long long>(x + y, x - y);
    a[i].first *= 2ll;
    a[i].second *= 2ll;
  }
  sort(a, a + n);
  long long s = 0, e = 1e10;
  while (s != e) {
    long long m = (s + e) / 2;
    if (trial(m))
      e = m;
    else
      s = m + 1;
  }
  printf("%.10f", s * 0.5);
}
