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 C++ (GCC 9.2.1) (judge verdict: Accepted)

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <deque>
#include <string>
#include <cstring>
#include <iomanip>
#include <fstream>
#include <map>
#include <unordered_map>
#include <bitset>
#include <fstream>
#pragma warning(disable:4996)
#define hayai ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define INF 0x3F3F3F3F
#define MAX 100001
#define MAXLOGO 17
#define MOD 1000000007
#define ALPHABET 128
using namespace std;
typedef long long ll;

//freopen("perimetric_chapter_1_input.txt", "r", stdin);
//freopen("result.txt", "w", stdout);

ll f1(pair <ll, ll > a, pair<ll, ll> b)
{
    return a.first + a.second < b.first + b.second;
}

ll f2(pair<ll, ll> a, pair<ll, ll> b)
{
    return a.first - a.second < b.first - b.second;
}

ll dist (pair<ll, ll> a, pair <ll, ll> b)
{
    return abs(a.first - b.first) + abs (a.second - b.second);
}

int main(void)
{
    ll n;
    cin >> n;
    vector<pair<ll, ll>> v1(n), v2(n);
    for (int i = 0; i < n; i++)
    {
        cin >> v1[i].first >> v1[i].second;
    }
    v2 = v1;
    sort (v1.begin(), v1.end(), f1);
    sort (v2.begin(), v2.end(), f2);
    ll mx1 = dist(v1[n - 1], v1[0]);
    ll mx2 = dist(v2[n - 1], v2[0]);
    cout << max(mx1, mx2) << endl;
}