#include <bits/stdc++.h>   using namespace std;   const int N = 1e5;   const long long INF = 1e18;   inline int abs(int x) { return x > 0 ? x : -x; }   inline long long sqr(long long x) { return x * x; }   bool cmp(pair<int, int>& x, pair<int, int>& y) { return x.first < y.first; }   int n;   pair<int, int> p[N];   long long minY[N + 1][2], maxY[N + 1][2];   bool check(long long d) {     long long dY, sqrX, sqrY;     int l = 0, r = 0;     while (r < n) {       while (r < n && sqr((long long)p[r].first - p[l].first) <= d) {         sqrX = max(sqr((long long)p[r].first), sqr((long long)p[l].first));         sqrY = max(max(sqr(maxY[l][0]), sqr(maxY[n - r - 1][1])),                    max(sqr(minY[l][0]), sqr(minY[n - r - 1][1])));         dY = sqr(max(maxY[l][0], maxY[n - r - 1][1]) -                  min(minY[n - r - 1][1], minY[l][0]));         if (max(dY, sqrX + sqrY) <= d) {           if (d < 400) {           }           return true;         }         ++r;       }       while (r < n && l <= r && sqr((long long)p[r].first - p[l].first) > d) ++l;     }     return false;   }   long long solve() {     sort(p, p + n, cmp);     maxY[0][0] = maxY[0][1] = -INF;     minY[0][0] = minY[0][1] = INF;     for (int i = 1; i <= n; ++i) {       maxY[i][0] = max(maxY[i - 1][0], (long long)p[i - 1].second);       maxY[i][1] = max(maxY[i - 1][1], (long long)p[n - i].second);       minY[i][0] = min(minY[i - 1][0], (long long)p[i - 1].second);       minY[i][1] = min(minY[i - 1][1], (long long)p[n - i].second);     }     long long l = 0, r = INF, m;     while (l < r) {       m = (l + r) / 2;       if (check(m))         r = m;       else         l = m + 1;     }     return min(l, sqr((long long)p[n - 1].first - p[0].first));   }   int main() {     scanf( %d , &n);     for (int i = 0; i < n; ++i) scanf( %d%d , &p[i].first, &p[i].second);     long long ans = solve();     for (int i = 0; i < n; ++i) swap(p[i].first, p[i].second);     ans = min(ans, solve());     printf( %I64d , ans);   }   