#include <bits/stdc++.h>   using namespace std;   const int N = (int)1e5 + 10;   const long long INF = (long long)1e9;   struct Point {     long long x, y;     Point() : x(), y() {}     void scan() { scanf( %lld%lld , &x, &y); }     bool operator<(const Point &a) const {       return y < a.y || (y == a.y && x < a.x);     }   };   long long sqr(long long a) { return a * a; }   Point p[N];   long long prefMinX[N], prefMaxX[N];   long long suffMinX[N], suffMaxX[N];   int n;   void precalc() {     for (int i = 0; i < n; i++) {       prefMinX[i] = (i == 0 ? p[i].x : min(prefMinX[i - 1], p[i].x));       prefMaxX[i] = (i == 0 ? p[i].x : max(prefMaxX[i - 1], p[i].x));     }     for (int i = n - 1; i >= 0; i--) {       suffMinX[i] = (i == n - 1 ? p[i].x : min(suffMinX[i + 1], p[i].x));       suffMaxX[i] = (i == n - 1 ? p[i].x : max(suffMaxX[i + 1], p[i].x));     }   }   long long getMaxD(long long y1, long long y2, long long x1, long long x2) {     long long d = max(sqr(y1 - y2), sqr(x1 - x2));     d = max(d, max(sqr(y1), sqr(y2)) + max(sqr(x1), sqr(x2)));     return d;   }   bool check(long long d) {     long long xD = sqr(prefMinX[n - 1] - prefMaxX[n - 1]);     if (xD <= d) return true;     int it = 0;     int kek = n;     42;     for (int i = 0; i < n; i++) 42;     42;     for (int i = 0; i < n; i++) {       if (i != 0 && p[i].y == p[i - 1].y) continue;       while (it < n && (it <= i || (sqr(p[it].y - p[i].y) <= d))) it++;       while (kek > 0 && llabs(p[kek - 1].y) > llabs(p[i].y)) kek--;       int cur = min(kek, it);       42;       if (cur < i) break;       long long y1 = p[i].y;       long long y2 = p[cur - 1].y;       if (i == 0 && cur == n) return true;       long long x1, x2;       if (i == 0) {         x1 = suffMinX[cur];         x2 = suffMaxX[cur];       } else if (cur == n) {         x1 = prefMinX[i - 1];         x2 = prefMaxX[i - 1];       } else {         x1 = min(suffMinX[cur], prefMinX[i - 1]);         x2 = max(suffMaxX[cur], prefMaxX[i - 1]);       }       long long curD = getMaxD(y1, y2, x1, x2);       if (curD <= d) return true;     }     it = n - 1;     kek = -1;     42;     for (int i = n - 1; i >= 0; i--) {       if (i != n - 1 && p[i].y == p[i + 1].y) continue;       while (it >= 0 && (it >= i || (sqr(p[it].y - p[i].y) <= d))) it--;       while (kek<n - 1 & llabs(p[kek + 1].y)> llabs(p[i].y)) kek++;       int cur = max(kek, it);       42;       if (cur > i) break;       long long y1 = p[i].y;       long long y2 = p[cur + 1].y;       if (i == n - 1 && cur == -1) return true;       long long x1, x2;       if (i == n - 1) {         x1 = prefMinX[cur];         x2 = prefMaxX[cur];       } else if (cur == -1) {         x1 = suffMinX[i + 1];         x2 = suffMaxX[i + 1];       } else {         x1 = min(prefMinX[cur], suffMinX[i + 1]);         x2 = max(prefMaxX[cur], suffMaxX[i + 1]);       }       long long curD = getMaxD(y1, y2, x1, x2);       if (curD <= d) return true;     }     return false;   }   int main() {     scanf( %d , &n);     for (int i = 0; i < n; i++) {       p[i].scan();     }     sort(p, p + n);     precalc();     long long l = -1, r = (long long)1e18;     while (r - l > 1) {       long long mid = (l + r) / 2;       if (check(mid))         r = mid;       else         l = mid;     }     printf( %lld n , r);     return 0;   }