import sys def main(): input = sys.stdin.read().split() n = int(input[0]) xs = [] ys = [] idx = 1 for _ in range(n): x = int(input[idx]) y = int(input[idx + 1]) xs.append(x) ys.append(y) idx += 2 s = [xs[i] + ys[i] for i in range(n)] d = [xs[i] - ys[i] for i in range(n)] max_s = max(s) min_s = min(s) max_d = max(d) min_d = min(d) # Define the four sorted lists # sorted_x is indices sorted by x, then y sorted_x = sorted(range(n), key=lambda i: (xs[i], ys[i])) sorted_y = sorted(range(n), key=lambda i: (ys[i], xs[i])) sorted_s = sorted(range(n), key=lambda i: (s[i], xs[i])) sorted_d = sorted(range(n), key=lambda i: (d[i], xs[i])) # Build position arrays pos_x = [0] * n for idx_list, original_i in enumerate(sorted_x): pos_x[original_i] = idx_list pos_y = [0] * n for idx_list, original_i in enumerate(sorted_y): pos_y[original_i] = idx_list pos_s = [0] * n for idx_list, original_i in enumerate(sorted_s): pos_s[original_i] = idx_list pos_d = [0] * n for idx_list, original_i in enumerate(sorted_d): pos_d[original_i] = idx_list k = 5 min_distances = [float('inf')] * n for i in range(n): current_min = float('inf') for sorted_list, pos in [(sorted_x, pos_x), (sorted_y, pos_y), (sorted_s, pos_s), (sorted_d, pos_d)]: p = pos[i] start = max(0, p - k) end = min(len(sorted_list) - 1, p + k) for idx in range(start, end + 1): j = sorted_list[idx] if j == i: continue current_dist = abs(xs[i] - xs[j]) + abs(ys[i] - ys[j]) if current_dist < current_min: current_min = current_dist min_distances[i] = current_min min_p = float('inf') for i in range(n): a = max_s - s[i] b = s[i] - min_s c = max_d - d[i] d_i = d[i] - min_d current_max = max(a, b, c, d_i) current_p = abs(current_max - min_distances[i]) if current_p < min_p: min_p = current_p print(min_p) if __name__ == '__main__': main()