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 eps 1e-9
#define pi acos(-1)
#define nmax 1000000
#define f(c,a,b) for(int c=a; c<=b; c++)

using namespace std;
typedef double db;
struct P{
    db x, y;
    P(){}
    P(db x, db y) : x(x) , y(y) {}
    P operator - (P a){ return P(x-a.x, y-a.y); }
    db dot(P a){ return x*a.x+y*a.y; }
    db clen() { return sqrt(x*x+y*y); }
    db times(P a){ return x*a.y-y*a.x; }
}po[nmax];
typedef P V;
int n;

int sign(db x){ return x<-eps ? -1 : x>eps; }

db Diameter(){
    int lm=0, rm=1;
    f(i,0,n-1){
        if(po[lm].x > po[i].x) lm=i;
        if(po[rm].x < po[i].x) rm=i;
    }
    int i=rm, j=lm;
    //printf("now rm=%d,lm=%d\n",rm,lm);
    db ans = 0;
    int cnt=0;
    while(i!=lm || j!=rm){
        cnt++;
        //if(cnt<11) printf("i=%d  j=%d\n",i,j);
        ans = max(ans, (po[j]-po[i]).clen());
        if( (po[(i+1)%n]-po[i]).times(po[(j+1)%n]-po[j])<=0 ) i=(i+1)%n; else j=(j+1)%n;
    }
    return ans;    
}

int main(){
    //freopen("owo.in","r",stdin);
    cin >> n;
    f(i,0,n-1) scanf("%lf%lf", &po[i].x, &po[i].y);
    printf("%.12f", Diameter() );
    return 0;
}