#include<bits/stdc++.h>
using namespace std;
int n;
struct node{
int x,y;
}p[50005];
int l;
node top[50005];
bool cmp(node a,node b){
if(a.x==b.x){
return a.y<b.y;
}else{
return a.x<b.x;
}
}
int dot(node a,node b){
return a.x*b.x+a.y*b.y;
}
int cross(node a,node b){
return a.x*b.y-a.y*b.x;
}
int Len(node a){
return dot(a,a);
}
node operator -(node a,node b){
return node{a.x-b.x,a.y-b.y};
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&p[i].x,&p[i].y);
}
if(n==1){
cout<<0;
return 0;
}
sort(p+1,p+1+n,cmp);
top[++l]=p[1];
for(int i=2;i<=n;i++){
while(l>1&&cross(top[l]-top[l-1],p[i]-top[l-1])<=0){
l--;
}
top[++l]=p[i];
}
int k=l;
for(int i=n-1;i>=1;i--){
while(l>k&&cross(top[l]-top[l-1],p[i]-top[l-1])<=0){
l--;
}
top[++l]=p[i];
}
if(l==2){
printf("%d\n",Len(top[2]-top[1]));
return 0;
}
int j=3;
int ans=0;
for(int i=1;i<=l;i++){
while(abs(cross(top[j]-top[i],top[i+1]-top[i]))<abs(cross(top[j%l+1]-top[i],top[i+1]-top[i]))){
j=j%l+1;
}
ans=max(ans,max(Len(top[j]-top[i]),Len(top[j]-top[i+1])));
}
printf("%d\n",ans);
return 0;
}