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 Haskell (GHC 8.8.3) (judge verdict: Accepted)

import qualified Data.Text.Lazy as T
import qualified Data.Text.Lazy.IO as T
import qualified Data.Text.Lazy.Read as T
import Data.List (uncons)
import Data.Maybe (fromJust)

main :: IO ()
main = do
  let
    f :: (Int, Int) -> (Int, Int)
    f (x, y) = (x - y, x + y)
    g :: (Int, Int) -> [(Int, Int)] -> ((Int, Int), (Int, Int))
    g (u0, v0) = foldl step ((u0, u0), (v0, v0))
      where
        step ((min0, max0), (min1, max1)) (u, v) = (g' min0 max0 u, g' min1 max1 v)
        g' s t u | u < s     = (u, t)
                 | t < u     = (s, u)
                 | otherwise = (s, t)
    h :: ((Int, Int), (Int, Int)) -> Int
    h ((min0, max0), (min1, max1)) = max (max0 - min0) (max1 - min1)
  n <- unsafeTextToInt <$> T.getLine :: IO Int
  xys <- map (unsafeListToPair . map unsafeTextToInt . T.words) . T.lines <$> T.getContents :: IO [(Int, Int)]
  print . h . uncurry g . fromJust . uncons . map f $ xys

unsafeListToPair :: [Int] -> (Int, Int)
unsafeListToPair [x, y] = (x, y)
{-# INLINE unsafeListToPair #-}

unsafeTextToInt :: T.Text -> Int
unsafeTextToInt s = case T.signed T.decimal s of
  Right (n, _) -> n
{-# INLINE unsafeTextToInt #-}