N = int(input()) P = [tuple(map(int, input().split())) for _ in range(N)] P = [(x + y, x - y) for x, y in P] mi = min(P, key=lambda a: a[0])[0] ma = max(P, key=lambda a: a[0])[0] l = -1 r = 1 << 31 while r - l > 1: m = (l + r) // 2 d = m / 2 x1 = mi + d x2 = ma - d left = [] both = [] right = [] ok = True for x, y in P: a = abs(x - x1) <= d b = abs(x - x2) <= d if a and b: both.append(y) elif a: left.append(y) elif b: right.append(y) else: ok = False break if not ok: l = m continue y = () if both: y = y + (min(both) + d, max(both) - d) if left: y = y + (min(left) + d, max(left) - d) for y1 in y: if left and (abs(y1 - min(left)) > d or abs(y1 - max(left))) > d: continue rem = right + [y for y in both if abs(y - y1) > d] if not rem or max(rem) - min(rem) <= 2 * d: r = m break else: l = m print(r)