#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Split(' ', StringSplitOptions.RemoveEmptyEntries), 0); return T.Parse(_input[_iter++], null); } #endregion var n = I(); var xz = new long[n]; var yz = new long[n]; for (var i = 0; i < n; i++) { var x = I(); var y = I(); xz[i] = x + y; yz[i] = x - y; } if (n <= 2) { Console.WriteLine(0); return; } Array.Sort(xz); Array.Sort(yz); var ans = 0L; for (var lp = 0; lp < 2; lp++) { var lz = new long[n]; { var max = long.MinValue; var min = long.MaxValue; for (var i = 0; i < n; i++) { var x = xz[i]; max = Math.Max(max, x); min = Math.Min(min, x); lz[i] = max - min; } } var xns = long.MaxValue; { var max = long.MinValue; var min = long.MaxValue; for (var i = n - 1; i >= 1; i--) { var x = xz[i]; max = Math.Max(max, x); min = Math.Min(min, x); xns = Math.Min(xns, Math.Max(max - min, lz[i - 1])); } } ans = Math.Max(ans, xns); (xz, yz) = (yz, xz); } Console.WriteLine(ans);