Problem:
Score : 500 points

Problem Statement

There are N points on the 2D plane, i-th of which is located on (x_i, y_i).
There can be multiple points that share the same coordinate.
What is the maximum possible Manhattan distance between two distinct points?

Here, the Manhattan distance between two points (x_i, y_i) and (x_j, y_j) is defined by |x_i-x_j| + |y_i-y_j|.

Constraints

2 \leq N \leq 2 \times 10^5

1 \leq x_i,y_i \leq 10^9

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
x_1 y_1
x_2 y_2
:
x_N y_N

Output

Print the answer.

Sample Input 1

3
1 1
2 4
3 2

Sample Output 1

4

The Manhattan distance between the first point and the second point is |1-2|+|1-4|=4, which is maximum possible.

Sample Input 2

2
1 1
1 1

Sample Output 2

0

Solution in Ruby (2.7.1) (judge verdict: Time Limit Exceeded)

n = gets.to_i
dots = []

def div(a, b)
	if b[1] == a[1] then
		if b[0] == a[0] then
			0
		elsif b[0] > a[0] then
			Float::INFINITY
		else
			- Float::INFINITY
		end
	else
		(b[0] - a[0]) * 1.0 / (b[1] - a[1])
	end
end

def manh(a, b)
	(b[1] - a[1]).abs + (b[0] - a[0]).abs
end

min_x = Float::INFINITY
start_index = nil

n.times{ |i|
	x, y = gets.split.map &:to_i
	dots << [x,y,0]
	
	if min_x > x then
		min_x = x
		start_index= i
	end
}

start = dots[start_index]
stack = [start]
dots.delete_at(start_index)

dots.each{ |x| x[2] = div(start, x) }

dots.sort!{ |a,b| a[2] <=> b[2] }

dots.each{ |x|
	while stack.size >= 2 && div(stack[-1], x) > div(stack[-2], x)
		stack.pop
	end
	stack.push(x)
}

max = 0

(0...stack.size).each{ |i|
	(i + 1 ... stack.size).each{ |j|
		dis = manh(stack[i],stack[j])
		if dis > max then
			max = dis
		end
	}
}

puts max