#include <bits/stdc++.h>
using namespace std;
template <typename T, typename S>
ostream &operator<<(ostream &os, const pair<T, S> &v) {
  os << "(";
  os << v.first << "," << v.second << ")";
  return os;
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  os << "[";
  int sz = v.size();
  for (int i = 0; i < sz; ++i) {
    os << v[i];
    if (i != sz - 1) os << ",";
  }
  os << "]\n";
  return os;
}
vector<pair<int, int> > pts;
vector<int> toDo;
int N;
vector<int> suffMax, prefMax;
vector<int> suffMin, prefMin;
bool check(int K) {
  int ptL = -1, ptR = -1;
  for (int i = 0; i < toDo.size(); i++) {
    int curY = toDo[i];
    while (ptL < N - 1 && pts[ptL + 1].second < curY) {
      ptL++;
    }
    while (ptR < N - 1 && pts[ptR + 1].second - curY <= K) {
      ptR++;
    }
    int xmin = min(prefMin[ptL + 1], suffMin[ptR + 1]);
    int xmax = max(prefMax[ptL + 1], suffMax[ptR + 1]);
    if (xmax - xmin <= K && xmax >= xmin) {
      return 1;
    }
  }
  return 0;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> N;
  set<int> X;
  for (int i = 0; i < N; i++) {
    int xx, yy;
    cin >> xx >> yy;
    pts.push_back({xx + yy, xx - yy});
    X.insert(xx - yy);
  }
  sort(pts.begin(), pts.end(),
       [&](pair<int, int> a, pair<int, int> b) { return a.second < b.second; });
  suffMin.resize(N + 1, 2e9);
  suffMax.resize(N + 1, -2e9);
  prefMin.resize(N + 1, 2e9);
  prefMax.resize(N + 1, -2e9);
  for (int i = 0; i < N; i++) {
    prefMax[i + 1] = max(prefMax[i], pts[i].first);
    prefMin[i + 1] = min(prefMin[i], pts[i].first);
  }
  for (int i = N - 1; i >= 0; i--) {
    suffMax[i] = max(suffMax[i + 1], pts[i].first);
    suffMin[i] = min(suffMin[i + 1], pts[i].first);
  }
  for (auto u : X) {
    toDo.push_back(u);
  }
  int lo = 0, hi = (int)2e9 + 3;
  while (hi > lo) {
    long long mid = ((long long)hi + lo) / 2;
    if (check(mid)) {
      hi = mid;
    } else {
      lo = mid + 1;
    }
  }
  cout << fixed << setprecision(3) << (long double)lo / 2 << endl;
  cerr << "Time : " << (double)clock() / (double)CLOCKS_PER_SEC << "s\n";
  return 0;
}
