#include using namespace std; constexpr int inf = (1 << 30) - 1; int main() { int N; cin >> N; vector< pair< int, int > > P(N); int x_min = inf, y_min = inf, x_max = -inf, y_max = -inf; for (auto& [x, y] : P) { int a, b; cin >> a >> b; x = a + b; y = a - b; x_min = min(x_min, x); x_max = max(x_max, x); y_min = min(y_min, y); y_max = max(y_max, y); } int ret = inf * 2; for (auto x : {x_min, x_max}) { for (auto y : {y_min, y_max}) { vector< tuple< int, int, int > > vs; for (auto& [a, b]: P) { vs.emplace_back(max(abs(a - x), abs(b - y)), a, b); } ranges::sort(vs); int a_min = inf, a_max = -inf, b_min = inf, b_max = -inf; vector score {0}; for (auto& [d, a, b]: vs) { a_min = min(a_min, a); a_max = max(a_max, a); b_min = min(b_min, b); b_max = max(b_max, b); score.emplace_back(max(a_max - a_min, b_max - b_min)); } a_min = inf, a_max = -inf, b_min = inf, b_max = -inf; ret = min(ret, score.back()); for (auto& [d, a, b]: vs | views::reverse) { a_min = min(a_min, a); a_max = max(a_max, a); b_min = min(b_min, b); b_max = max(b_max, b); score.pop_back(); ret = min(ret, max({a_max - a_min, b_max - b_min, score.back()})); } } } cout << ret << endl; }