/*
TASK:atom
LANG:C++
*/

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

#define IN "atom.in"
#define OUT "atom.out"
#define MAXN 128

#define EPS 1e-9
#define EQ(a,b) ((fabs(a-b) < EPS)?(1):(0))
#define SQ(a) ((a)*(a))

typedef struct point {
        double x,y;
};


typedef struct line {
        double a,b,c;
};

point ar[MAXN];
int N;
double R;
point C;

line points_to_line (point & p1,point & p2) {
     line l;

     if(EQ(p1.x,p2.x)) {
        l.a = 1;
        l.b = 0;
        l.c = - (p1.x);
     } else {
       l.a = - (p2.y - p1.y)/(p2.x-p1.x);
       l.b = 1;
       l.c = - (l.a * p1.x + l.b * p1.y);
     }
     return l;
}

line point_and_slope_to_line (double slope, point p1) {
     line l;
     l.a = - slope;
     l.b = 1;
     l.c = - (l.a * p1.x + l.b * p1.y);
     return l;
}

line simetrala (point & p1,point & p2) {
     point p;
     p.x = (p1.x + p2.x)/2;
     p.y = (p1.y + p2.y)/2;
     line l1 = points_to_line(p1,p2);
     line l;
     
     if (EQ(l1.a,0.0)) {
        l.a = 1;
        l.b = 0;
        l.c = - p.x;
     } else if (EQ(l1.b,0.0)) {
        l.a = 0;
        l.b = 1;
        l.c = - p.y;
     } else {
       l = point_and_slope_to_line(1/l1.a,p);
     }
     return l;
}

inline double dist (point & p1,point & p2) {
       return sqrt(SQ(p1.x - p2.x)+SQ(p1.y - p2.y));
}

inline double det (point &p1, point & p2, point & p3) {
       return   (p1.x*p2.y + p2.x*p3.y + p3.x*p1.y)
              - (p1.x*p3.y + p3.x*p2.y + p2.x*p1.y);
}

point cross_lines (line l1,line l2) {
      point p;
      p.x = (l1.b*l2.c - l2.b*l1.c) / (l1.a*l2.b - l2.a*l1.b);
      if (EQ(l1.b,0.0)) {
         p.y = (-(l2.a*p.x+l2.c))/l2.b;
      } else {
         p.y = (-(l1.a*p.x+l1.c))/l1.b;
      }
      return p;
}

int circle (point & p1,point & p2,point & p3) {
      line l1 = simetrala(p1,p2);
      line l2 = simetrala(p2,p3);
      point p = cross_lines(l1,l2);
      C = p;
      R = dist(p,p1);
      return 0;
}

int circle (point & p1,point & p2) {
       double X = (p1.x + p2.x)/2;
       double Y = (p1.y + p2.y)/2;
       C.x = X;
       C.y = Y;
       R = dist(p1,p2) / 2;
       return 0;
}

int read() {
    scanf("%d",&N);
    for (int i=1; i<=N; i++) scanf("%lf%lf",&ar[i].x,&ar[i].y);
    return 0;
}

double best;
point pbest;

int check (point p) {
    double d= dist(p,C);
    if (d < R && EQ(d,R) == 0) {
       return 1;
    }
    return 0;
}

int run () {
    if (best > R || EQ(R,best)) return 0;
    
    for (int k=1; k<=N; k++) {
        if (check(ar[k])) {
           R = dist(ar[k],C);
           if (best > R || EQ(R,best)) return 0;
        }
    }

    if (best < R) {
       pbest = C;
       best = R;
    }
    return 0;
}

int solve () {

    for (int i=1; i<=N; i++) {
        for (int j=i+1; j<=N; j++) {
            circle(ar[i],ar[j]);
            run();
        }
    }

    for (int i=1; i<=N; i++) {
        for (int j=i+1; j<=N; j++) {
            for (int k=j+1; k<=N; k++) {
            
                if (EQ(det(ar[i],ar[j],ar[k]),0)) {
                   continue;
                }
                
                circle(ar[i],ar[j],ar[k]);

                double t1 = det(ar[i],ar[j],C);
                double t2 = det(ar[j],ar[k],C);
                double t3 = det(ar[k],ar[i],C);

                if ( (t1 < 0.0 || EQ(t1,0.0)) && (t2 < 0.0 || EQ(t2,0.0)) && (t3 < 0.0 || EQ(t3,0.0)) ) {
                   run();
                }
                
                if ( (t1 > 0.0 || EQ(t1,0.0)) && (t2 > 0.0 || EQ(t2,0.0)) && (t3 > 0.0 || EQ(t3,0.0)) ) {
                   run();
                }
                
                if ((double)clock()/CLOCKS_PER_SEC > 5.7) {
                   return 0;
                }
            }
        }
    }
    return 0;
}

int main () {
    clock();
    
//    freopen(IN,"r",stdin);
//    freopen(OUT,"w",stdout);

    best = 0.0;
    read();
    solve();
    
    printf("%.2lf\n%.2lf %.2lf\n",best,pbest.x,pbest.y);

/*    for (int i=1; i<=N; i++) {
        printf("%lf %lf\n",ar[i].x,ar[i].y);
    }*/
    
    return 0;
}


