#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define clean(a,b) memset(a,b,sizeof(a))
const int inf=0x3f3f3f3f;
const int maxn=2e5+9;
const int maxm=1e3+9;
const int mod=1e9+7;
struct point{
double x,y;
};
point o;
double r=0;
double xmult(point p0,point p1,point p2){
return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
double dis(point p1,point p2){
return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
}
bool in_circle(point p){
return dis(p,o)<=r?1:0;
}
void calc(point p0,point p1,point p2){//给出三个点确定 圆心
double a=p0.x-p1.x,b=p0.y-p1.y,c=p0.x-p2.x,d=p0.y-p2.y;
double e=((p0.x*p0.x-p1.x*p1.x)-(p1.y*p1.y-p0.y*p0.y))/2.0;
double f=((p0.x*p0.x-p2.x*p2.x)-(p2.y*p2.y-p0.y*p0.y))/2.0;
o.x=(b*f-d*e)/(b*c-a*d);
o.y=(c*e-a*f)/(b*c-a*d);
r=dis(p0,o);
}
void min_cover_circle(point *a,int n){
random_shuffle(a+1,a+n+1);
for(int i=1;i<=n;i++){
if(!in_circle(a[i])){
o=a[i];
r=0;
for(int j=1;j<i;j++){
if(!in_circle(a[j])){
o.x=(a[i].x+a[j].x)/2.0;
o.y=(a[i].y+a[j].y)/2.0;
r=dis(a[i],o);
for(int k=1;k<j;k++){
if(!in_circle(a[k])){
calc(a[i],a[j],a[k]);
}
}
}
}
}
}
}
point po[maxn];
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lf%lf",&po[i].x,&po[i].y);
}
min_cover_circle(po,n);
printf("%.10lf\n%.10lf %.10lf\n",r,o.x,o.y);
}
/*
求长度为 n 的点集 a 的最小圆覆盖
o 为圆心,r 为 当前圆的 半径
*/