#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);
}
