#include<iostream>
#include<algorithm>
using namespace std;
class Point{
public:
int x , y;
};
Point p[50005];
int top , stack[50005];
inline double dis(Point &a , Point &b){
return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
inline int xmult(Point &p1 , Point &p2 , Point &p0){
return (p1.x-p0.x)*(p2.y-p0.y) - (p1.y-p0.y)*(p2.x-p0.x);
}
int cmp(const void * a , const void * b){
Point *p1 = (Point *)a;
Point *p2 = (Point *)b;
int ans = xmult(*p1 , *p2 , p[0]);
if(ans < 0) return 1;
else if(ans == 0 && ( (*p1).x >= (*p2).x)) return 1;
else return -1;
}
void graham(int n){
qsort(p+1 , n-1 , sizeof(Point) , cmp);
int i;
stack[0] = 0 , stack[1] = 1;
top = 1;
for(i = 2 ; i < n ; i++){
while(top > 0 && xmult(p[stack[top]] , p[i] , p[stack[top-1]]) <= 0) top--;
stack[++top] = i;
}
int temp = top;
for(i = n-2 ; i >= 0 ; i--){
while(top > temp && xmult(p[stack[top]] , p[i] , p[stack[top-1]]) <= 0) top--;
stack[++top] = i;
}
}
int rotating_calipers(){
int i , q = 1;
int ans = 0;
stack[top] = 0;
for(i = 0 ; i < top ; i++){
while(xmult(p[stack[i + 1]], p[stack[q + 1]], p[stack[i]]) > xmult(p[stack[i + 1]], p[stack[q]], p[stack[i]])) q = (q + 1) % (top);
int temp = max(dis(p[stack[i]] , p[stack[q]]) , dis(p[stack[i + 1]], p[stack[q + 1]]));
ans = max(ans, temp);
}
return ans;
}
int main(){
int i , n , leftdown;
while(scanf("%d",&n) != EOF){
leftdown = 0;
for(i = 0 ; i < n ; ++i){
scanf("%d%d", &p[i].x, &p[i].y);
if(p[i].y < p[leftdown].y || (p[i].y == p[leftdown].y && p[i].x < p[leftdown].x)) leftdown = i;
}
swap(p[0], p[leftdown]);
graham(n);
printf("%d\n",rotating_calipers());
}
return 0;
}
//presented by 大吉大利,今晚AC