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>
using namespace std;
#define forn(i,n) for(int i=0;i <int(n);++i)
#define forsn(i,s,n) for(int i=s;i <int(n);++i)
struct vec {
	double x, y;
	double operator ^ (vec const& o) const {
		return x*o.y - y*o.x;
	}
	double operator * (vec const& o) const {
		return x*o.x + y*o.y;
	}
	vec operator - (vec const& o) const {
		vec res = *this;
		res.x -= o.x; res.y -= o.y;
		return res;
	}
	double n2 () const {
		return *this * *this;
	}
	double n1 () const {
		return sqrt(n2());
	}
};

int main () {
	int n;
	cin >> n;
	vector<vec> ps(n);
	forn(i,n) cin >> ps[i].x >> ps[i].y;
	ps.push_back(ps[0]);

	double diam = 0;
	int j = 1;
	forn(i,n){
		vec edge = ps[i+1] - ps[i];
		vec perp = {-edge.y, edge.x};
		while(perp*ps[j] <= perp*ps[j+1]){
			j += 1;
			if(j == n) j = 0;
			vec d1 = ps[j] - ps[i];
			vec d2 = ps[j] - ps[i+1];
			diam = max({diam, d1.n1(), d2.n1()});
		}
	}
	printf("%.9f\n",diam);
}