#include<bits/stdc++.h> #define int long long usingnamespace std; constint N=1e7+30,INF=2e18+10,mod=1e7+19,MOD=1e9+7,B=131,b=233; int T,n; typedef pair<int, int> pi;
int vis[N]; vector<pi> f[N]; //map<pi, vector<pi> > f; vector<pi> p, q, t; intdis(pi l, pi r){ return (l.first-r.first)*(l.first-r.first)+ (l.second-r.second)*(l.second-r.second); } boolcmp(pi x, pi y){ return x.first<y.first; } inthashing(int x, int y){ int res = 0; x = (x * MOD) % mod + mod; y = (y * MOD) % mod + mod; res = ((x * B + y * b) % MOD + MOD) % MOD; int ans = res % mod; return ans; } boolcheck(int x, int y){ // is isolate for(int i=x-1;i<=x+1;++i){ for(int j=y-1;j<=y+1;++j){ int now = hashing(i, j); if(vis[now]>(i==x && j==y)) returnfalse; } } returntrue; }
intcalculate(pi me, int x, int y){ int d = INF; for(int i=x-1;i<=x+1;++i){ for(int j=y-1;j<=y+1;++j){ int now = hashing(i, j); for(auto you : f[now]){ d = min(d, dis(me, you)); } } } return d; } voidwork(){ mt19937 rnd(time(0)); vector<int> D; t = p; while(!p.empty()){ int size = p.size(), id = rnd()%size; int d = INF; for(int i=0;i<size;++i){ if(i == id) continue; d = min(d, dis(p[i], p[id])); } double b = sqrt(d)/3.0; q.clear(); for(int i=0;i<size;++i){ int x = (int)(p[i].first/b), y = (int)(p[i].second/b); vis[hashing(x, y)]++; } for(int i=0;i<size;++i){ int x = (int)(p[i].first/b), y = (int)(p[i].second/b); if(!check(x, y)) q.push_back(p[i]); } for(int i=0;i<N;++i) vis[i]=0; // this is faster lol // for(int i=0;i<size;++i){ // int x = (int)(p[i].first/b), y = (int)(p[i].second/b); // vis[hashing(x, y)]--; // } p = q; D.push_back(d); } double d = sqrt(D[D.size()-1]); if(d == 0){ puts("0.0000"); return; } int size = t.size(); int ans = INF; for(int i=0;i<size;++i){ int x=(int)(t[i].first/d),y=(int)(t[i].second/d); ans = min(ans,calculate(t[i], x, y)); f[hashing(x, y)].push_back(t[i]); } printf("%lld\n", ans); //printf("%.4lf\n", sqrt(ans)); } voidsolve(){ scanf("%lld",&n); for(int i=1,x,y;i<=n;++i){ scanf("%lld%lld",&x,&y); p.push_back(make_pair(x, y)); } work(); }