import math class UnionFind(object): def __init__(self, n): self.uf = [-1 for _ in xrange(n)] def union(self, x, y): x = self.find(x) y = self.find(y) if x == y: return if self.uf[x] >= self.uf[y]: self.uf[y] += self.uf[x] self.uf[x] = y else: self.uf[x] += self.uf[y] self.uf[y] = x def find(self, x): leaves = [] while self.uf[x] >= 0: leaves.append(x) x = self.uf[x] for lf in leaves: self.uf[lf] = x return x N = input() points = [map(int, raw_input().split()) for _ in xrange(N)] f = lambda p1, p2:(p1[0]-p2[0])**2+(p1[1]-p2[1])**2 dists = [[0 for i in xrange(N)] for j in xrange(N)] for i in xrange(N): for j in xrange(i+1, N): dists[i][j] = f(points[i], points[j]) high = 8*10**18 low = 0 while high - low > 1: uf = UnionFind(N) middle = (high+low)/2 for i in xrange(N): for j in xrange(i+1, N): if dists[i][j] <= middle: uf.union(i, j) if uf.find(0) == uf.find(N-1): high = middle else: low = middle sqrt = int(math.sqrt(high)) if sqrt**2 != high: sqrt += 1 print sqrt/10*10+(sqrt%10>0)*10