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 <cmath>
# include <cstdio>
# include <iostream>
using namespace std;

int N;

struct Point
{
	double x, y;
};
Point operator -(Point a, Point b) {return (Point) {a.x - b.x, a.y - b.y};}
double norm(Point a) {return a.x * a.x + a.y * a.y;}
double abs(Point a) {return sqrt(norm(a));}
Point p[80050];

double ConvexHull(Point * p, int n)
{
	double res = -1;
	for(int i = 0, k = 0; i < n; i++)
	{
		while(norm(p[i] - p[k]) < norm(p[i] - p[(k + 1) % n])) k = (k + 1) % n;
		res = max(res, abs(p[i] - p[k]));
	}
	return res;
}

int main()
{
	scanf("%d", &N);
	for(int i = 0; i < N; i++)
	{
		scanf("%lf%lf", &p[i].x, &p[i].y);
	}
	printf("%.12lf\n", ConvexHull(p, N));
	return 0;
}