#include <bits/stdc++.h>
using namespace std;
static const int INF = 500000000;
template <class T>
void debug(T a, T b) {
  for (; a != b; ++a) cerr << *a << ' ';
  cerr << endl;
}
int n;
complex<double> ps[100005];
bool cmp(const complex<double>& a, const complex<double>& b) {
  if (abs(a.real() - b.real()) < 1e-9) return a.imag() < b.imag();
  return a.real() < b.real();
}
const double PI = acos(-1.0);
double evermin[100005], evermax[100005], latermin[100005], latermax[100005];
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    int a, b;
    scanf("%d%d", &a, &b);
    ps[i] = complex<double>((double)a, (double)b);
    ps[i] *= polar(1.0, PI / 4);
  }
  sort(ps, ps + n, cmp);
  evermin[0] = 1e15;
  evermax[0] = -1e15;
  latermin[n] = 1e15;
  latermax[n] = -1e15;
  for (int i = 0; i < n; ++i) {
    evermin[i + 1] = min(evermin[i], ps[i].imag());
    evermax[i + 1] = max(evermax[i], ps[i].imag());
  }
  for (int i = n - 1; i >= 0; --i) {
    latermin[i] = min(latermin[i + 1], ps[i].imag());
    latermax[i] = max(latermax[i + 1], ps[i].imag());
  }
  double lb = 0, ub = 1e10;
  for (int hoge = 0; hoge < 65; ++hoge) {
    double md = (lb + ub) / 2;
    int j = 0, ok = 0;
    for (int i = 0; i < n; ++i) {
      while (j < n && ps[j].real() - ps[i].real() <= md * 2) ++j;
      double maxi = max(evermax[i], latermax[j]),
             mini = min(evermin[i], latermin[j]);
      if (maxi - mini <= 2 * md) {
        ok = true;
        break;
      }
    }
    if (ok)
      ub = md;
    else
      lb = md;
  }
  printf("%.10f\n", lb * sqrt(2.0));
  return 0;
}
