import math import itertools import collections class DisjointSet(object): def __init__(self, n): self.parent = list(range(n)) self.rank = [0] * n self.num = n # number of disjoint sets def union(self, x, y): self._link(self.find_set(x), self.find_set(y)) def _link(self, x, y): if x == y: return self.num -= 1 if self.rank[x] > self.rank[y]: self.parent[y] = x else: self.parent[x] = y if self.rank[x] == self.rank[y]: self.rank[y] += 1 def find_set(self, x): xp = self.parent[x] if xp != x: self.parent[x] = self.find_set(xp) return self.parent[x] def read_data(): N = int(input()) xy = [] for n in range(N): x, y = map(int, input().split()) xy.append((x, y)) return N, xy def solve(N, xy): if N == 0: return 1 if N == 1: return 2 djs = DisjointSet(N) for i in range(N-1): xi, yi = xy[i] for j in range(i+1, N): xj, yj = xy[j] if (xi-xj)**2 + (yi-yj)**2 <= 100: djs.union(i, j) n_groups = djs.num if n_groups == N: return 2 groups = collections.defaultdict(list) for i in range(N): groups[djs.find_set(i)].append(i) max_dist = -1 for group in groups.values(): if len(group) == 1: dist = 1 if dist > max_dist: max_dist = dist for i, j in itertools.combinations(group, 2): xi, yi = xy[i] xj, yj = xy[j] dist = math.hypot(xi-xj, yi-yj) if dist > max_dist: max_dist = dist return max_dist + 2 N, xy = read_data() print(solve(N, xy))