#include <bits/stdc++.h>
using namespace std;
const long long INF = 1LL << 32;
int N;
pair<long long, long long> P[100100];
long long highleft[100100], lowleft[100100];
long long highright[100100], lowright[100100];
bool good(long long k) {
  long long low = P[0].second, high = P[0].second;
  bool done = false;
  int left = 0;
  for (int right = 0; right < N; right++) {
    while (P[right].first - P[left].first > k) left++;
    long long hl = (left == 0 ? -INF : highleft[left - 1]);
    long long ll_ = (left == 0 ? INF : lowleft[left - 1]);
    long long hr = (right == N - 1 ? -INF : highright[right + 1]);
    long long lr = (right == N - 1 ? INF : lowright[right + 1]);
    long long h = max(hl, hr);
    long long l = min(ll_, lr);
    if (h - l <= k) return true;
  }
  return false;
}
int main() {
  cin >> N;
  for (int i = 0; i < N; i++) {
    long long first, second;
    cin >> first >> second;
    P[i].first = -first + second;
    P[i].second = first + second;
  }
  sort(P, P + N);
  highleft[0] = P[0].second;
  lowleft[0] = P[0].second;
  for (int i = 1; i < N; i++) {
    highleft[i] = max(highleft[i - 1], P[i].second);
    lowleft[i] = min(lowleft[i - 1], P[i].second);
  }
  highright[N - 1] = P[N - 1].second;
  lowright[N - 1] = P[N - 1].second;
  for (int i = N - 2; i >= 0; i--) {
    highright[i] = max(highright[i + 1], P[i].second);
    lowright[i] = min(lowright[i + 1], P[i].second);
  }
  long long low = -1, high = INF - 1;
  while (low + 1 < high) {
    long long mid = (low + high) / 2;
    if (good(mid))
      high = mid;
    else
      low = mid;
  }
  cout << high / 2 << '.' << (high % 2) * 5;
  return 0;
}
