#!/usr/bin/env python3 # -*- coding: utf-8 -*- import array import collections import itertools EPS = 10 ** (-9) Station = collections.namedtuple("Station", "index coordinate") class UnionFind(object): def __init__(self, number_of_nodes): self.par = array.array("L", range(number_of_nodes)) self.rank = array.array("L", (0 for i in range(number_of_nodes))) def root(self, node): if self.par[node] == node: return node else: r = self.root(self.par[node]) self.par[node] = r return r def in_the_same_set(self, node1, node2): return self.root(node1) == self.root(node2) def unite(self, node1, node2): x = self.root(node1) y = self.root(node2) if x == y: pass elif self.rank[x] < self.rank[y]: self.par[x] = y else: self.par[y] = x if self.rank[x] == self.rank[y]: self.rank[x] += 1 def main(): n = int(input()) if n == 0: print("{:.12f}".format(1.0)) return elif n == 1: print("{:.12f}".format(2.0)) return stations = [Station(i, complex(*map(int, input().split()))) for i in range(n)] uf = UnionFind(n) for st1, st2 in itertools.combinations(stations, 2): if abs(st1.coordinate - st2.coordinate) < 10.0 + EPS: uf.unite(st1.index, st2.index) answer = 2.0 for st1, st2 in itertools.combinations(stations, 2): if uf.in_the_same_set(st1.index, st2.index): answer = max(answer, 2.0 + abs(st1.coordinate - st2.coordinate)) print("{:.12f}".format(answer)) if __name__ == '__main__': main()