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++ (Clang 10.0.0) (judge verdict: Wrong Answer)

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <queue>
#include <ctime>
#include <cassert>
#include <complex>
#include <string>
#include <cstring>
#include <chrono>
#include <random>
#include <array>
#include <bitset>
#define rep(i,r) for(int i = 0; i < (r); i++)
#define pb push_back
#define all(a) a.begin(), a.end()
#define fastio ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define int long long
#define uint unsigned long long
#define inf 0x3f3f3f3f3f3f3f3f
#define endl '\n'
using namespace std;
 
 
signed main() {
    fastio;
    int n; cin >> n;
    // vector<pair<int,int>> a(n);
    map<pair<int,int>, int> mp;
    rep (i, n) {
        int x, y;
        cin >> x >> y;
        mp[make_pair(x, y)]++;
    }
    int maxi = -1, mini = 1e9 + 10;
    pair<int,int> best = {-1, -1};
    for (auto& p : mp) {
        int x = p.first.first, y = p.first.second;
        if (x + y > maxi) {
            maxi = max(maxi, x + y);
            best = p.first;
        }
    }
    for (auto& p : mp) {
        int x = p.first.first, y = p.first.second;
        if (x + y < mini) {
            if (x == best.first and y == best.second and p.second <= 1) continue;
            else
                mini = min(mini, x + y);
        }
    }
    int res = abs(maxi - mini);
    cout << res << endl;
 
    return 0;
 
}