#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
#define REP(i,n) for (ll i = 0; i < (n); ++i)


struct Point {
    ll x, y;
    Point() : x(0), y(0) {}
    Point(ll x, ll y) : x(x), y(y) {}

    int quadrant() const {
        if(x == 0 && y == 0){
            return 0;
        }
        if(x >= 0){
            if(y >= 0){
                return 1;
            }else{
                return 4;
            }
        }else{
            if(y >= 0){
                return 2;
            }else{
                return 3;
            }
        }
    }

    Point& operator+=(const Point& other){
        x += other.x;
        y += other.y;
        return *this;
    }

    Point& operator-=(const Point& other){
        x -= other.x;
        y -= other.y;
        return *this;
    }

    Point operator+(const Point& other) const {
        return Point(x, y) += other;
    }
    Point operator-(const Point& other) const{
        return Point(x, y) -= other;
    }

    ll cross(const Point& q) const {
        return x * q.y - y * q.x;
    }

    bool operator<(const Point& q) const {
        int qp = quadrant();
        int qq = q.quadrant();
        if(qp != qq){ return qp < qq; }
        return cross(q) > 0;
    }

    bool operator<=(const Point& q) const {
        int qp = quadrant();
        int qq = q.quadrant();
        if(qp != qq){ return qp < qq; }
        return cross(q) >= 0;
    }

    ll dot(const Point& q) const {
        return x * q.x + y * q.y;
    }

    ll norm2() const {
        return x * x + y * y;
    }

    double norm() const {
        return sqrt((double)norm2());
    }

    double dist(const Point& q) const {
        return (*this - q).norm();
    }
};

bool cmp_xy(const Point& p, const Point& q){
    if(p.x != q.x){
        return p.x < q.x;
    }else{
        return p.y < q.y;
    }
}

double dist(const Point& p, const Point& q){
    return p.dist(q);
}

double norm(double x, double y){
    return sqrt(x * x + y * y);
}

bool is_enclose(const vector<Point>& ps, double cx, double cy, double r, double eps=1e-6){
    for(const auto q : ps){
        if(norm(q.x - cx, q.y - cy) > r + eps){ return false; }
    }
    return true;
}

double check(const vector<Point>& ps, const Point& p1, const Point& p2){
    double cx = (p1.x + p2.x) / 2.0;
    double cy = (p1.y + p2.y) / 2.0;
    const double radius = norm(p1.x - cx, p1.y - cy);

    if(is_enclose(ps, cx, cy, radius)){
        return radius;
    }else{
        return -1;
    }
}

double check(
        const vector<Point>& ps,
        const Point& p1, const Point& p2, const Point& p3
){
    const Point sub12 = p1 - p2;
    const Point sub23 = p2 - p3;
    const ll a = sub12.x;
    const ll b = sub12.y;
    const ll c = sub23.x;
    const ll d = sub23.y;
    if(a * d - b * c == 0){
        return -1;
    }
    double d12 = p1.norm2() - p2.norm2();
    double d23 = p2.norm2() - p3.norm2();
    const double cx = (d * d12 - b * d23) / (2 * (a * d - b * c));
    const double cy = (- c * d12 + a * d23) / (2 * (a * d - b * c));
    const double radius = norm(p1.x - cx, p1.y - cy);

    if(is_enclose(ps, cx, cy, radius)){
        return radius;
    }else{
        return -1;
    }
}

void solve(long long N, std::vector<long long> x, std::vector<long long> y){
    vector<Point> p(N);
    REP(i, N){
        p.at(i).x = x.at(i);
        p.at(i).y = y.at(i);
    }

    double ans = -1;
    for(ll i = 0; i < N; ++i){
        for(ll j = i + 1; j < N; ++j){
            const double tmp = check(p, p.at(i), p.at(j));
            if(tmp > 0 && (ans < 0 || ans > tmp)){
                ans = tmp;
            }

            for(ll k = j + 1; k < N; ++k){
                const double tmp = check(p, p.at(i), p.at(j), p.at(k));
                if(tmp > 0 && (ans < 0 || ans > tmp)){
                    ans = tmp;
                }
            }
        }
    }
    printf("%.20f\n", ans);
}

// Generated by 1.1.6 https://github.com/kyuridenamida/atcoder-tools
int main(){
    long long N;
    scanf("%lld",&N);
    std::vector<long long> x(N);
    std::vector<long long> y(N);
    for(int i = 0 ; i < N ; i++){
        scanf("%lld",&x[i]);
        scanf("%lld",&y[i]);
    }
    solve(N, std::move(x), std::move(y));
    return 0;
}


Measured memory_bytes: 256