#include <bits/stdc++.h>   using namespace std;   const int MAXN = 150;   const double eps = 1e-8;   struct point {     double x, y;     point() {}     point(double _x, double _y) : x(_x), y(_y) {}     friend bool operator<(const point &a, const point &b) {       if (fabs(a.x - b.x) < eps) {         return a.y < b.y;       }       return a.x < b.x;     }   };   vector<point> vec;   map<point, int> vis;   point square1;   point CircumCenter(point a, point b, point c) {     point cp;     double a1 = b.x - a.x, b1 = b.y - a.y, c1 = (a1 * a1 + b1 * b1) / 2;     double a2 = c.x - a.x, b2 = c.y - a.y, c2 = (a2 * a2 + b2 * b2) / 2;     double d = a1 * b2 - a2 * b1;     cp.x = a.x + (c1 * b2 - c2 * b1) / d;     cp.y = a.y + (a1 * c2 - a2 * c1) / d;     return cp;   }   double getDistance(point a, point b) {     return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));   }   double dianji(point veca, point vecb) {     return veca.x * vecb.x + veca.y * vecb.y;   }   bool isLenEqual(point a, point b, point c) {     if (fabs(getDistance(a, b) - getDistance(a, c)) < eps) return true;     return false;   }   int fdTriangle(point a, point b, point c) {     point vecOne = point(a.x - b.x, a.y - b.y);     point vecTwo = point(b.x - c.x, b.y - c.y);     point vecThree = point(c.x - a.x, c.y - a.y);     double dj1 = dianji(vecOne, vecTwo);     double dj2 = dianji(vecTwo, vecThree);     double dj3 = dianji(vecThree, vecOne);     if (fabs(dj1) < eps || fabs(dj2) < eps || fabs(dj3) < eps) {       if (fabs(dj1) < eps && isLenEqual(a, b, c)) {         square1 = a;         return 2;       } else if (fabs(dj2) < eps && isLenEqual(c, a, b)) {         square1 = c;         return 2;       } else if (fabs(dj3) < eps && isLenEqual(b, a, c)) {         square1 = b;         return 2;       }       return 0;     }     if (dj1 < 0 && dj2 < 0 && dj3 < 0) return 1;     return 0;   }   void compute() {     double mx = -1.0;     point all_ans;     int all_flag = 0;     for (int i = 0; i < vec.size(); i++) {       for (int j = 0; j < vec.size(); j++) {         for (int k = 0; k < vec.size(); k++) {           if (i == j || j == k || i == k) continue;           int flag = 0;           point pos_ans;           point a = vec[i], b = vec[j], c = vec[k];           if (!(fabs((b.y - a.y) * (c.x - b.x) - (b.x - a.x) * (c.y - b.y)) <                 eps)) {             int type = fdTriangle(a, b, c);             if (type == 1) {               flag = 1;               pos_ans = CircumCenter(a, b, c);             } else if (type == 2) {               point cc = CircumCenter(a, b, c);               double X = 2 * cc.x - square1.x;               double Y = 2 * cc.y - square1.y;               if (vis[point(X, Y)] == 1) {                 flag = 1;                 pos_ans = cc;               }             }           }           if (flag == 1) {             double r = getDistance(pos_ans, a);             for (int z = 0; z < vec.size(); z++) {               point each = vec[z];               if (getDistance(pos_ans, each) + eps < r) {                 flag = 0;                 break;               }             }             if (flag == 1 && mx < r) {               mx = r;               all_flag = 1;               all_ans = pos_ans;             }           }         }       }     }     if (all_flag == 1) {       printf( %.6f n , mx);     } else {       printf( -1 n );     }   }   int main() {     int n;     while (cin >> n) {       vis.clear();       vec.clear();       for (int i = 0; i < n; i++) {         double x, y;         cin >> x >> y;         point p = point(x, y);         vec.push_back(p);         vis[p] = 1;       }       compute();     }     return 0;   }