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: Time Limit Exceeded)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i,x,y) for(ll i=x;i<=y;i++)
#define imin INT_MIN
#define imax INT_MAX
int mod =1e9+7;

ll r,c,k;
int mat[3001][3001];
ll ans;
bool vis[3001][3001];

bool valid(int x,int y){
	if(x>=1 && x<=r && y>=1 && y<=c) return 1;
	return 0;
}

void dfs(ll sofar,int x,int y,int rows){
	if(x==r && y==c){
		ans=max(ans,sofar+mat[x][y]); return;
	}
	
	vis[x][y]=1;
	
	if(valid(x+1,y)) dfs(sofar+mat[x][y],x+1,y,1);

	if(valid(x,y+1))
	{ 	if(rows<3) {
		dfs(sofar+mat[x][y],x,y+1,rows+1);
		dfs(sofar,x,y+1,rows);
		} 
	}
	
	vis[x][y]=0;
	
}

int main(){
	cin.tie(NULL);
    ios_base::sync_with_stdio();

	ll n;
	cin>>n;
	vector<pair<int,int>> points(n);
	ll a,b;
	for(int i=0;i<n;i++){
		cin>>a>>b;
		points[i]={a,b};
	}
	
	int ans=0;
	for(int i=0;i<n;i++){
		for(int j=i+1;j<n;j++){
			int local = abs(points[i].first-points[j].first)+abs(points[i].second-points[j].second);
			ans=max(ans,local);
		}
	}
	
	cout<<ans;
	return 0;
}