WA了#4#13#14
#include<bits/stdc++.h>
using namespace std;
int n,top,p;
long long Min=1e9,ans;
struct node{
long long x,y;
}a[100005],s[100005];
long long dis(node u,node v){
return (u.x-v.x)*(u.x-v.x)+(u.y-v.y)*(u.y-v.y);
}
long long check(node a1,node b1,node a2,node b2){
return (b2.y-a2.y)*(b1.x-a1.x)-(b1.y-a1.y)*(b2.x-a2.x);
}
bool cmp(node u,node v){
double tmp=check(a[1],u,a[1],v);
if(tmp>0) return 1;
if(tmp==0&&dis(a[0],u)<dis(a[0],v))return 1;
return 0;
}
long long q(node x,node y,node z){
return (y.x-x.x)*(z.y-x.y)-(y.y-x.y)*(z.x-x.x);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
cin>>a[i].x>>a[i].y;
if(a[i].y<Min)Min=a[i].y,p=i;
}
swap(a[p],a[1]);
sort(a+2,a+n+1,cmp);
s[++top]=a[1];
for(int i=2;i<=n;i++){
while(top>1&&check(s[top-1],s[top],s[top],a[i])<0)top--;
s[++top]=a[i];
}
p=3;
if(top<3){
cout<<dis(s[1],s[2])<<endl;
return 0;
}
s[++top]=s[1];
for(int i=1;i<=top;i++){
while(q(s[i],s[i+1],s[p])<q(s[i],s[i+1],s[p+1]))p=(p+1)%(top),p+=(!p);
ans=max(ans,max(dis(s[p],s[i]),dis(s[i+1],s[p])));
}
cout<<ans<<endl;
}