// Slower C++ solution:
#pragma GCC optimize(3 , "Ofast" , "inline")



#include <bits/stdc++.h>



#define rep(i , a , b) for(register int i=(a);i<=(b);i++)

#define rop(i , a , b) for(register ll i=(a);i<(b);i++)

#define per(i , a , b) for(register ll i=(a);i>=(b);i--)

#define por(i , a , b) for(register ll i=(a);i>(b);i--)



using namespace std;

typedef long long ll;

typedef unsigned long long ull;

typedef pair<double , double > pi;

template<class T>

inline void read (T &x) {

    x = 0;

    int sign = 1;

    char c = getchar ();

    while (c < '0' || c > '9') {

        if ( c == '-' ) sign = - 1;

        c = getchar ();

    }

    while (c >= '0' && c <= '9') {

        x = x * 10 + c - '0';

        c = getchar ();

    }

    x = x * sign;

}

const int maxn = 1e6+10;

const int inf = int (1e9);

const ll INF = ll(1e18);

const double PI = acos (-1);

const int mod = 1e9+7;

const double eps = 1e-8;

struct point {

    double x,y;

}e[maxn];



inline double dist(point a,point b){

    return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));

}





int main(){

    int n;

    read (n);

    point o;

    rep (i,1,n) {

        scanf ("%lf%lf",&e[i].x,&e[i].y);

        o.x+=e[i].x;

        o.y+=e[i].y;

    }

    o.x/=n;

    o.y/=n;

    double ans=0;

    double delta=1000000.0;

    int id;

    while(delta>eps){

        id=1;

        double maxDis=dist(o,e[id]);

        for(int i=2;i<=n;i++){

            double tempDis=dist(o,e[i]);

            if(tempDis>maxDis){

                maxDis=tempDis;

                id=i;

            }

        }

        ans=maxDis;

        o.x+=(e[id].x-o.x)/maxDis*delta;

        o.y+=(e[id].y-o.y)/maxDis*delta;

        delta*=0.998;

    }

    printf("%.10f\n",ans);

    return 0;

}



/*

 *

 */

// Faster C++ solution for the same problem (measured speedup: 1.5528432740916998x):


/*#pragma GCC optimize(3 , "Ofast" , "inline")



#include <bits/stdc++.h>



#define rep(i , a , b) for(register int i=(a);i<=(b);i++)

#define rop(i , a , b) for(register ll i=(a);i<(b);i++)

#define per(i , a , b) for(register ll i=(a);i>=(b);i--)

#define por(i , a , b) for(register ll i=(a);i>(b);i--)



using namespace std;

typedef long long ll;

typedef unsigned long long ull;

typedef pair<double , double > pi;

template<class T>

inline void read (T &x) {

    x = 0;

    int sign = 1;

    char c = getchar ();

    while (c < '0' || c > '9') {

        if ( c == '-' ) sign = - 1;

        c = getchar ();

    }

    while (c >= '0' && c <= '9') {

        x = x * 10 + c - '0';

        c = getchar ();

    }

    x = x * sign;

}

const int maxn = 1e6+10;

const int inf = int (1e9);

const ll INF = ll(1e18);

const double PI = acos (-1);

const int mod = 1e9+7;

const double eps = 1e-8;

struct point {

    double x,y;

}e[maxn];



inline double dist(point a,point b){

    return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));

}





int main(){

    int n;

    read (n);

    point o;

    rep (i,1,n) {

        scanf ("%lf%lf",&e[i].x,&e[i].y);

        o.x+=e[i].x;

        o.y+=e[i].y;

    }

    o.x/=n;

    o.y/=n;

    double ans=0;

    double delta=1000000.0;

    int id;

    while(delta>eps){

        id=1;

        double maxDis=dist(o,e[id]);

        for(int i=2;i<=n;i++){

            double tempDis=dist(o,e[i]);

            if(tempDis>maxDis){

                maxDis=tempDis;

                id=i;

            }

        }

        ans=maxDis;

        o.x+=(e[id].x-o.x)/maxDis*delta;

        o.y+=(e[id].y-o.y)/maxDis*delta;

        delta*=0.998;

    }

    printf("%.10f\n",ans);

    return 0;

}

*/



/*

 *

 */





 #include <cmath>

#include <cstdio>

#include <cstdlib>

#include <cstring>

#include <iostream>



using namespace std;



int n;

double r;



struct point {

  double x, y;

} p[100005], o;



inline double sqr(double x) { return x * x; }



inline double dis(point a, point b) {

  return sqrt(sqr(a.x - b.x) + sqr(a.y - b.y));

}



inline bool cmp(double a, double b) { return fabs(a - b) < 1e-8; }



point geto(point a, point b, point c) {

  double a1, a2, b1, b2, c1, c2;

  point ans;

  a1 = 2 * (b.x - a.x), b1 = 2 * (b.y - a.y),

  c1 = sqr(b.x) - sqr(a.x) + sqr(b.y) - sqr(a.y);

  a2 = 2 * (c.x - a.x), b2 = 2 * (c.y - a.y),

  c2 = sqr(c.x) - sqr(a.x) + sqr(c.y) - sqr(a.y);

  if (cmp(a1, 0)) {

    ans.y = c1 / b1;

    ans.x = (c2 - ans.y * b2) / a2;

  } else if (cmp(b1, 0)) {

    ans.x = c1 / a1;

    ans.y = (c2 - ans.x * a2) / b2;

  } else {

    ans.x = (c2 * b1 - c1 * b2) / (a2 * b1 - a1 * b2);

    ans.y = (c2 * a1 - c1 * a2) / (b2 * a1 - b1 * a2);

  }

  return ans;

}



int main() {

  scanf("%d", &n);

  for (int i = 1; i <= n; i++) scanf("%lf%lf", &p[i].x, &p[i].y);

  for (int i = 1; i <= n; i++) swap(p[rand() % n + 1], p[rand() % n + 1]);

  o = p[1];

  for (int i = 1; i <= n; i++) {

    if (dis(o, p[i]) < r || cmp(dis(o, p[i]), r)) continue;

    o.x = (p[i].x + p[1].x) / 2;

    o.y = (p[i].y + p[1].y) / 2;

    r = dis(p[i], p[1]) / 2;

    for (int j = 2; j < i; j++) {

      if (dis(o, p[j]) < r || cmp(dis(o, p[j]), r)) continue;

      o.x = (p[i].x + p[j].x) / 2;

      o.y = (p[i].y + p[j].y) / 2;

      r = dis(p[i], p[j]) / 2;

      for (int k = 1; k < j; k++) {

        if (dis(o, p[k]) < r || cmp(dis(o, p[k]), r)) continue;

        o = geto(p[i], p[j], p[k]);

        r = dis(o, p[i]);

      }

    }

  }

  printf("%.10lf\n", r, o.x, o.y);

  return 0;

}