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 Rust (1.42.0) (judge verdict: Accepted)

#![allow(
  non_snake_case,
  unused_variables,
  unused_assignments,
  unused_mut,
  unused_imports,
  unused_macros,
  dead_code
)]
use proconio::fastout;
use proconio::input;
use proconio::marker::*;
use std::cmp::*;
use std::collections::*;
//use std::collections::VecDeque;
macro_rules! debug {
  ($($a:expr),* $(,)*) => {
      #[cfg(debug_assertions)]
      eprintln!(concat!($("| ", stringify!($a), "={:?} "),*, "|"), $(&$a),*);
  };
}
#[fastout]
fn main() {
  input! {
    N:usize,
    XY:[(i64,i64);N]
  }
  // 傾き-1の線分の距離が最大になるケースと傾き1の線分のケースで考える。
  // 傾き1のケース
  let mut minV1 = std::i64::MAX;
  let mut maxV1 = std::i64::MIN;
  let mut minV2 = std::i64::MAX;
  let mut maxV2 = std::i64::MIN;
  for i in 0..N {
    let v1 = XY[i].0 + XY[i].1;
    let v2 = XY[i].0 - XY[i].1;
    minV1 = min(minV1, v1);
    minV2 = min(minV2, v2);
    maxV1 = max(maxV1, v1);
    maxV2 = max(maxV2, v2);
  }
  let mut ans = max(maxV1 - minV1, maxV2 - minV2);
  println!("{}", ans);
}