#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 100;
pair<long long, long long> p[maxn];
long long m[maxn][2], mm[maxn][2], ycords[maxn], xcords[maxn];
int n;
bool can(long long l) {
  for (int i = 0; i < n; i++) {
    if (i > 0 && p[i - 1].second == p[i].second) continue;
    long long newY = p[i].second + l;
    int ind = upper_bound(ycords, ycords + n, newY) - ycords;
    int ind1 = lower_bound(ycords, ycords + n, p[i].second) - ycords - 1;
    long long left =
        min(ind1 < 0 ? INT_MAX : mm[ind1][0], ind < n ? m[ind][0] : INT_MAX);
    long long right =
        max(ind1 < 0 ? -INT_MAX : mm[ind1][1], ind < n ? m[ind][1] : -INT_MAX);
    if (right - left <= l || (left == INT_MAX && right == -INT_MAX)) {
      return true;
    }
    newY = p[i].second - l;
    ind = upper_bound(ycords, ycords + n, p[i].second) - ycords;
    ind1 = lower_bound(ycords, ycords + n, newY) - ycords - 1;
    left =
        min(ind1 >= 0 ? mm[ind1][0] : INT_MAX, ind < n ? m[ind][0] : INT_MAX);
    right =
        max(ind1 >= 0 ? mm[ind1][1] : -INT_MAX, ind < n ? m[ind][1] : -INT_MAX);
    if (right - left <= l || (left == INT_MAX && right == -INT_MAX)) {
      return true;
    }
  }
  return false;
}
int main() {
  cin >> n;
  for (long long i = 0; i < n; i++) {
    cin >> p[i].first >> p[i].second;
  }
  pair<long long, long long> rot[n];
  for (long long i = 0; i < n; i++) {
    rot[i].first = p[i].first - p[i].second;
    rot[i].second = p[i].second + p[i].first;
    p[i] = rot[i];
  }
  sort(p, p + n,
       [](pair<long long, long long> a, pair<long long, long long> b) {
         swap(a.first, a.second);
         swap(b.first, b.second);
         return a < b;
       });
  for (int i = 0; i < n; i++) {
    ycords[i] = p[i].second;
  }
  m[n - 1][0] = p[n - 1].first;
  m[n - 1][1] = p[n - 1].first;
  for (int i = n - 2; i >= 0; i--) {
    m[i][0] = min(m[i + 1][0], p[i].first);
    m[i][1] = max(m[i + 1][1], p[i].first);
  }
  mm[0][0] = p[0].first;
  mm[0][1] = p[0].first;
  for (int i = 1; i < n; i++) {
    mm[i][0] = min(mm[i - 1][0], p[i].first);
    mm[i][1] = max(mm[i - 1][1], p[i].first);
  }
  long long l = 0, r = 4 * (2e9 + 100);
  while (l < r) {
    long long mid = (l + r) / 2;
    bool result = can(mid);
    if (result) {
      r = mid;
    } else {
      l = mid + 1;
    }
  }
  cout << fixed << l / 2.f << '\n';
}
