#include<bits/stdc++.h>
#define int long long
using namespace std;
const int Kmaxn = 1e6 + 5;
int n;
struct node{
int x, y;
}a[Kmaxn], t[Kmaxn], b[Kmaxn];
int dis(int x1, int y11, int x2, int y2){
return (x1 - x2) * (x1 - x2) + (y11 - y2) * (y11 - y2);
}
bool cmp1(node a, node b){
return a.x < b.x;
}
void merge(int l, int r){
int mid = (l + r) / 2;
int i = l, j = mid + 1, tot = l - 1;
while(i <= mid && j <= r){
if(a[i].y <= a[j].y){
b[++tot] = a[i];
i++;
}
else{
b[++tot] = a[j];
j++;
}
}
while(i <= mid) b[++tot] = a[i], i++;
while(j <= r) b[++tot] = a[j], j++;
for(int k = l ; k <= r ; k++) a[k] = b[k];
}
int solve(int l, int r){
if(l == r) return 2e15;
int mid = (l + r) / 2, tot = 0, d = min(solve(l, mid), solve(mid + 1, r));
int v = a[mid].x;
merge(l, r);
for(int i = l ; i <= r ; i++){
if(abs(a[i].x - v) * abs(a[i].x - v) < d) t[++tot] = a[i];
}
for(int i = 1 ; i < tot ; i++){
for(int j = i + 1 ; j <= tot ; j++){
if((t[j].y - t[i].y) * (t[j].y - t[i].y) >= d) break;
d = min(d, dis(t[i].x, t[i].y, t[j].x, t[j].y));
}
}
return d;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for(int i = 1 ; i <= n ; i++) cin >> a[i].x >> a[i].y;
sort(a + 1, a + n + 1, cmp1);
cout << solve(1, n);
return 0;
}