// AOJ CGL_4_B Diameter of a Convex Polygon
// 2018.5.3 bal4u

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define EPS 1e-8

typedef struct { double x, y; } PP;

#if 1
#define gc() getchar_unlocked()
#else
#define gc() getchar()
#endif
int in()
{
	int n = 0, c = gc();
	if (c == '-') {	c = gc();
		do n = 10*n + (c & 0xf), c = gc(); while (c >= '0');
		return -n;
	}
	do n = 10*n + (c & 0xf), c = gc(); while (c >= '0');
	return n;
}

double dbl()
{
	int minus = 0;
	double x, y;
	int n = 0, c = gc();
	if (c == '-') minus = 1, c = gc();
	do n = 10*n + (c & 0xf), c = gc(); while (c >= '0');

	if (c == '.') {
		x = 0;
		y = 1, c = gc();
		do y *= 0.1, x += y * (c & 0xf), c = gc(); while (c >= '0');
		x += n;
	} else x = n;
	if (minus) x = -x;
	return x;
}

double dist(PP p1, PP p2) {	return hypot(p1.x-p2.x, p1.y-p2.y); }

double solve_by_movement(int n, PP *p)
{
	int  k, i, t;
	PP a;
	double move, max, d;

    a.x = a.y = 0;
	move = 0.5;
	while (move > EPS) {
		for (t = 0; t < 100; t++) {
			max = 0;
			for (i = 0; i < n; i++) {
				if ((d = dist(a, p[i])) > max) max = d, k = i;
			}
			a.x += (p[k].x - a.x)*move;
			a.y += (p[k].y - a.y)*move;
		}
		move /= 2;
	}
	return max;
}

PP p[80005];

int main()
{
	int n, i;

	n = in();
	for (i = 0; i < n; i++) p[i].x = dbl(), p[i].y = dbl();
	printf("%.10lf\n", 2*solve_by_movement(n, p));
	return 0;
}

