Problem: Find the diameter of a convex polygon g. In other words, find a pair of points that have maximum distance between them.

Constraints

* 3 ≤ n ≤ 80000
* -100 ≤ xi, yi ≤ 100
* No point in the g will occur more than once.

Input


n
x1 y1
x2 y2
:
xn yn


The first integer n is the number of points in g.

In the following lines, the coordinate of the i-th point pi is given by two real numbers xi and yi. The coordinates of points are given in the order of counter-clockwise visit of them. Each value is a real number with at most 6 digits after the decimal point.

Output

Print the diameter of g in a line. The output values should be in a decimal fraction with an error less than 0.000001.

Examples

Input

3
0.0 0.0
4.0 0.0
2.0 2.0


Output

4.00


Input

4
0.0 0.0
1.0 0.0
1.0 1.0
0.0 1.0


Output

1.414213562373

Solution (in CPP):

Solution:
#include<bits/stdc++.h>
#define forn(i, n) for(int i = 0; i < n; i++)
using namespace std;
typedef long double ld;
struct pnt{
	ld x, y;
	pnt(){}
	pnt(ld x, ld y) : x(x), y(y) {}
	pnt operator+(pnt b){
		return pnt(x + b.x, y + b.y);
	}
	pnt operator-(pnt b){
		return pnt(x - b.x, y - b.y);
	}
	ld operator%(pnt b){
		return x * b.y - b.x * y;
	}
};
ld area(pnt a, pnt b, pnt c){
	b = b - a;
	c = c - a;
	return abs(b % c);
}
ld dist(pnt a, pnt b){
	a = b - a;
	return hypot(a.x, a.y);
}
int main(){
	int n, k = 1;
	ld res = 0;
	cin>>n;
	vector<pnt> poly(n);
	forn(i, n) cin>>poly[i].x>>poly[i].y;
	//poly.push_back(poly[0]);
	while(area(poly[n - 1], poly[0], poly[(k + 1) % n]) > area(poly[n - 1], poly[0], poly[k])) k++;
	forn(i, n){
		res = max(res, dist(poly[i], poly[k]));
		while(area(poly[i], poly[(i + 1) % n], poly[(k + 1) % n]) > area(poly[i], poly[(i + 1) % n], poly[k])){
			k++;
			k %= n;
			res = max(res, dist(poly[i], poly[k]));
		}
	}
	cout<<fixed<<setprecision(6)<<res<<"\n";
	return 0;
}