#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100010;
const long long Inf = (long long)(1e+18);
bool cmp_px(pair<long long, long long> a, pair<long long, long long> b) {
  return a.first < b.first;
}
int N, i, j;
pair<long long, long long> p[MAXN];
long long pma[MAXN], pmi[MAXN], sma[MAXN], smi[MAXN];
bool chk(long long diam) {
  int L, R;
  L = R = 1;
  for (L = 1; L <= N; L++) {
    while ((R < N) && (p[R + 1].first - p[L].first <= diam)) R++;
    if (max(pma[L - 1], sma[R + 1]) - min(pmi[L - 1], smi[R + 1]) <= diam)
      return true;
  }
  return false;
}
int main() {
  scanf("%d", &N);
  for (i = 1; i <= N; i++) {
    long long u, v;
    scanf("%I64d%I64d", &u, &v);
    p[i] = make_pair(u + v, u - v);
  }
  sort(p + 1, p + N + 1, cmp_px);
  pma[0] = -Inf;
  pmi[0] = Inf;
  for (i = 1; i <= N; i++) {
    pma[i] = max(pma[i - 1], p[i].second);
    pmi[i] = min(pmi[i - 1], p[i].second);
  }
  sma[N + 1] = -Inf;
  smi[N + 1] = Inf;
  for (i = N; i; i--) {
    sma[i] = max(sma[i + 1], p[i].second);
    smi[i] = min(smi[i + 1], p[i].second);
  }
  if (chk(0)) {
    printf("%.9f\n", 0.0);
    return 0;
  }
  long long L = 0, R = (long long)(4e+9), Mid;
  while (R - L > 1) {
    Mid = (L + R) / 2;
    if (chk(Mid))
      R = Mid;
    else
      L = Mid;
  }
  printf("%.9f\n", 0.5 * R);
}
