都是答案不够优
#include <iostream>
#include <algorithm>
#include <string.h>
#include <iomanip>
#include <bitset>
#include <math.h>
#include <string>
#include <vector>
#include <queue>
#include <set>
#include <map>
#define fst first
#define scd second
#define db double
#define ll long long
#define mp make_pair
#define pb push_back
#define eb emplace_back
#define vi vector <int>
#define pii pair <int, int>
#define sz(x) ((int)x.size())
#define ms(f, x) memset(f, x, sizeof(f))
#define L(i, j, k) for (int i=(j); i<=(k); ++i)
#define R(i, j, k) for (int i=(j); i>=(k); --i)
#define ACN(i, H_u) for (int i=H_u; i; i=E[i].nxt)
using namespace std;
template <typename INT> void rd(INT &res) {
res=0; bool f=false; char ch=getchar();
while (ch<'0'||ch>'9') f|=ch=='-', ch=getchar();
while (ch>='0'&&ch<='9') res=(res<<1)+(res<<3)+(ch^48), ch=getchar();
res=(f?-res:res);
}
template <typename INT, typename...Args>
void rd(INT &x, Args &...y) { rd(x), rd(y...); }
//dfs
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=4e5;
const int N=maxn+10;
int n;
//wmr
struct node {
int x, y;
bool operator < (const node &k) const { return x<k.x||x==k.x&&y<k.y; }
} a[N], b[N], pl[N], pr[N];
ll sq(int x) { return (ll)x*x; }
ll dist(node x, node y) { return sq(x.x-y.x)+sq(x.y-y.y); }
//incra
ll divide(int l, int r) {
if (l==r) return INF;
int mid=l+r>>1; node pmid=a[mid];
ll d=min(divide(l, mid), divide(mid+1, r));
int cntl=0, cntr=0;
L(i, l, mid) if (sq(pmid.x-a[i].x)<=d) pl[++cntl]=a[i];
L(i, mid+1, r) if (sq(a[i].x-pmid.x)<=d) pr[++cntr]=a[i];
int cur=1;
L(i, 1, cntl) {
while (cur<=cntr&&sq(pl[i].y-pr[cur].y)>d) ++cur;
int ccur=cur;
while (ccur<=cntr&&sq(pr[ccur].y-pl[i].y)<=d) d=min(d, dist(pl[i], pr[ccur])), ++ccur;
}
int curl=l, curr=mid+1; cur=l-1;
while (curl<=mid&&curr<=r)
if (a[curl].y<a[curr].y) b[++cur]=a[curl++];
else b[++cur]=a[curr++];
while (curl<=mid) b[++cur]=a[curl++];
while (curr<=r) b[++cur]=a[curr++];
L(i, l, r) a[i]=b[i];
return d;
}
//lottle
signed main() {
// ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
freopen("P7883.in", "r", stdin);
freopen("P7883.out", "w", stdout);
rd(n);
L(i, 1, n) rd(a[i].x, a[i].y);
sort(a+1, a+n+1);
printf("%lld\n", divide(1, n));
return 0;
}
/*
input
2
-10000000 -10000000
10000000 10000000
output
800000000000000
*/