/*
TASK: atom
LANG: C
*/
#include<stdio.h>
#include<math.h>

#define MAXN 128
#define EPS 1e-7
#define MIN(e1,e2) ((e1)<(e2)?(e1):(e2))
#define INF 1000000000

typedef struct point { double x,y; } point;

int q[2*MAXN*MAXN];
point p[MAXN],r;
char u[MAXN][MAXN];

int cmp(double e1,double e2)
{
	if(e1-e2<-EPS) return -1;
	if(e1-e2>EPS) return 1;
	return 0;
}

double dist(point e1,point e2)
{
	return sqrt((e1.x-e2.x)*(e1.x-e2.x)+(e1.y-e2.y)*(e1.y-e2.y));
}

double cross(point e1,point e2,point e3)
{
	return cmp((e2.x-e1.x)*(e3.y-e1.y)-(e3.x-e1.x)*(e2.y-e1.y),0);
}

double dot(point e1,point e2,point e3)
{
	return (e1.x-e2.x)*(e3.x-e2.x)+(e1.y-e2.y)*(e3.y-e2.y);
}

double search(point A,point B,point C)
{
	double a1,b1,c1,a2,b2,c2,tmp,d1,d2;
	point r1,r2;
	a1=A.y-B.y; b1=B.x-A.x; c1=A.x*B.y-B.x*A.y;
	a2=A.x-C.x; b2=A.y-C.y; c2=-(a2*(A.x+C.x)+b2*(A.y+C.y))/2.0;
	tmp=a1*b2-a2*b1;
	r1.x=(b1*c2-b2*c1)/tmp;
	r1.y=(a2*c1-a1*c2)/tmp;
	d1=MIN(dist(r1,A),dist(r1,B));
	a2=B.x-C.x; b2=B.y-C.y; c2=-(a2*(B.x+C.x)+b2*(B.y+C.y))/2.0;
	tmp=a1*b2-a2*b1;
	r2.x=(b1*c2-b2*c1)/tmp;
	r2.y=(a2*c1-a1*c2)/tmp;
	d2=MIN(dist(r2,A),dist(r2,B));
	if(d1>d2) { r=r1; return d1; }
	else { r=r2; return d2; }
}

double calc(point A,point B,point C)
{
	double a1,b1,c1,a2,b2,c2,AB,BC,AC,tmp;
	AB=dist(A,B);
	AC=dist(A,C);
	BC=dist(B,C);
	if(dot(B,A,C)<0) return search(B,C,A);
	if(dot(A,B,C)<0) return search(A,C,B);
	if(dot(A,C,B)<0) return search(A,B,C);
	a1=A.x-B.x; b1=A.y-B.y; c1=-(a1*(A.x+B.x)+b1*(A.y+B.y))/2.0;
	a2=A.x-C.x; b2=A.y-C.y; c2=-(a2*(A.x+C.x)+b2*(A.y+C.y))/2.0;
	tmp=a1*b2-a2*b1;
	r.x=(b1*c2-b2*c1)/tmp;
	r.y=(a2*c1-a1*c2)/tmp;
	return dist(r,A);
}

int main()
{
	int n,i,mi,qb,qe,t1,t2;
	double mx,my,min,cur,res=-1;
	point tmp,answer;
	scanf("%d",&n);
	mx=INF; my=-INF; mi=-1;
	for(i=1;i<=n;i++)
	{
		scanf("%lf%lf",&p[i].x,&p[i].y);
		if(cmp(p[i].x,mx)<0||(!cmp(p[i].x,mx)&&p[i].y>my)) { mx=p[i].x; my=p[i].y; mi=i; }
	}
	tmp=p[mi]; p[mi]=p[n]; p[n]=tmp;
	mi=1;
	for(i=2;i<n;i++)
	{
		if(cross(p[n],p[mi],p[i])>0) mi=i;
	}
	qb=qe=0;
	q[qe++]=n; q[qe++]=mi;
	u[n][mi]=u[mi][n]=1;
	while(qb<qe)
	{
		t1=q[qb++]; t2=q[qb++];
		mi=-1; min=2;
		for(i=1;i<=n;i++)
		{
			if(cross(p[t1],p[t2],p[i])<0)
			{
				cur=dot(p[t1],p[i],p[t2])/(dist(p[t1],p[i])*dist(p[t2],p[i]));
				if(cur<min) { min=cur; mi=i; }
			}
		}
		if(mi==-1) continue;
		cur=calc(p[t1],p[t2],p[mi]);
		if(cur>res) { res=cur; answer=r; }
		if(!u[t1][mi])
		{
			u[t1][mi]=u[mi][t1]=1;
			q[qe++]=t1; q[qe++]=mi;
		}
		if(!u[mi][t2])
		{
			u[mi][t2]=u[t2][mi]=1;
			q[qe++]=mi; q[qe++]=t2;
		}
	}
	printf("%.2lf\n",res);
	printf("%.2lf %.2lf\n",answer.x,answer.y);
	return 0;
}
