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 <iostream>
#include <vector>
#include <map>
#include <algorithm>
#include <queue>
#include <math.h>
using namespace std;

struct punto{
    long double x,y;
    punto operator-(const punto b)const{
        punto aux;
        aux.x = x-b.x;
        aux.y = y-b.y;
        return aux;
    }
    long double operator*(const punto b)const{
        return ( (x*b.x) + (y*b.y) ) ;
    }
};

long double mod(punto p){
    return sqrt( p.x*p.x + p.y*p.y );
}

int main(){


int N;
cin>>N;
vector<punto>V (N);
for(int i = 0; i < N; i++){
    punto p;
    cin>>p.x>>p.y;
    V[i] = p;
}

long double rta = 0.0;
int index = 1;
for(int i = 0; i < N; i++){
        ///cout<<"---"<<endl;
    punto vec = V[ (i+1)%N ]-V[i]; /// genero todos los posibles lados
    punto per;per.x = -vec.y;per.y = vec.x; ///busco la perpendicular = (-y,x).
    /// ahora queremos el punto mas hacia el vector perpendicular.
    while( per*V[ (index+1)%N ] >= per*V[index] ){
        index = (index+1)%N;
    }
    rta = max(rta, max( mod(V[index]-V[i]) , mod(V[index]-V[(i+1)%N]) )  );
}

cout.precision(12);
cout << rta<< endl;

return 0;
}