思路见此第1条
#include<iostream>
#include<cmath>
#include<random>
#include<algorithm>
#include<time.h>
#define pi acos(-1.0)
using namespace std;
mt19937 rnd(time(0));
struct node{
double x,y;
}a[400005];
int s=57,n,q;
double ans=8e15;
inline bool cmp(node a,node b){
return a.x<b.x;
}
inline double dis(node a,node b){
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
inline void calc(){
for(register int i=1;i<=n;i++)
for(register int j=i+1;j<=ceil(50000000.0/n)+i&&j<=n;j++)
ans=min(ans,dis(a[i],a[j]));
}
inline void cala(){
for(register int i=1;i<=n;i++)
for(register int j=i+1;j<=ceil(36000000.0/n)+i&&j<=n;j++)
ans=min(ans,dis(a[i],a[j]));
}
inline void around(double ds){
ds=ds/180.0*pi;
for(register int i=1;i<=n;i++){
double x=a[i].x,y=a[i].y;
a[i].x=x*cos(ds)-y*sin(ds);
a[i].y=x*sin(ds)+y*cos(ds);
}
sort(a+1,a+1+n,cmp);
if(n>=300000) calc();
else cala();
}
inline long long read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0' || ch>'9'){
if(ch=='-'){
f=-1;
}
ch=getchar();
}
while(ch>='0' && ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
signed main(){
scanf("%d",&n);
for(register int i=1;i<=n;i++){
a[i].x=read();
a[i].y=read();
}
around(0);
if(n>=300000){
for(q=1;q<=2;q++){
around(rnd()%178+1);
}
}else{
for(q=1;q<=3;q++){
around(rnd()%178+1);
}
}
printf("%lld\n",(long long)ceil(ans));
return 0;
}