#include #include using namespace std; class range {private: struct I{int x;int operator*(){return x;}bool operator!=(I& lhs){return x table; public: UnionFind(int); int find(int); void unite(int, int); }; UnionFind::UnionFind(int size) { table.assign(size, -1); } int UnionFind::find(int x) { if(table[x] < 0) { return x; } return table[x] = find(table[x]); } void UnionFind::unite(int x, int y) { int s1 = find(x), s2 = find(y); if(s1 == s2) { return; } if(s1 > s2) { swap(s1, s2); } table[s1] += table[s2]; table[s2] = s1; } int main(void) { int n; scanf("%d", &n); vector> dist(n, vector(n, 0)); vector v(n); for(int i : range(n)) { int x, y; scanf("%d%d", &x, &y); v[i] = Point(x, y); } UnionFind nya(n); for(int i : range(n)) { for(int j : range(n)) { int dd = v[i].distdist(v[j]); dist[i][j] = dd; dist[j][i] = dd; if(i == j) { continue; } if(dd > 10 * 10) { continue; } nya.unite(i, j); } } int res = 0; for(int i : range(n)) { for(int j : range(n)) { if(i == j) { continue; } if(nya.find(i) != nya.find(j)) { continue; } res = max(res, dist[i][j]); } } printf("%lf\n", sqrt(res) + 1 + (n>0)); return 0; }