#include <bits/stdc++.h>   using namespace std;   const double eps = 1e-9;   struct _hash {     int operator()(const complex<double> &p) const {       return p.real() * 20001 + p.imag();     }   };   int n;   complex<double> p[100];   unordered_set<complex<double>, _hash> pnts;   double ans = -1;   inline int compare(const double &a, const double &b) {     if (fabs(a - b) < eps) return 0;     return a < b ? -1 : 1;   }   bool intersect(const complex<double> &a, const complex<double> &b,                  const complex<double> &p, const complex<double> &q,                  complex<double> &ret) {     double d1 = ((conj(p - a) * (b - a)).imag());     double d2 = ((conj(q - a) * (b - a)).imag());     ret = (d1 * q - d2 * p) / (d1 - d2);     return (fabs(d1 - d2) > eps);   }   complex<double> findCenter(const complex<double> &a, const complex<double> &b,                              const complex<double> &c) {     complex<double> m1 = (((a) + (b)) / 2.0);     complex<double> m2 = (((b) + (c)) / 2.0);     complex<double> p1 =         (complex<double>(-(((b) - (a))).imag(), (((b) - (a))).real()));     complex<double> p2 =         (complex<double>(-(((c) - (b))).imag(), (((c) - (b))).real()));     complex<double> r;     assert(intersect(m1, m1 + p1, m2, m2 + p2, r));     return r;   }   void check(const complex<double> &center, const double &r) {     double minDist = 1e9;     for (int i = 0; i < n; ++i)       minDist = min(minDist, (hypot((((p[i]) - (center))).real(),                                     (((p[i]) - (center))).imag())));     if (compare(minDist, r) < 0) return;     assert(compare(r, minDist) == 0);     ans = max(ans, r);   }   int main() {     scanf( %d , &n);     for (int i = 0; i < n; ++i) {       int x, y;       scanf( %d %d , &x, &y);       pnts.insert(p[i] = complex<double>(x, y));     }     for (int i = 0; i < n; ++i)       for (int j = i + 1; j < n; ++j)         for (int k = j + 1; k < n; ++k) {           complex<double> triangle[3] = {p[i], p[j], p[k]};           for (int a = 0; a < 3; ++a) {             int b = (a + 1) % 3;             int c = (b + 1) % 3;             double d = ((conj(((triangle[b]) - (triangle[a]))) *                          (((triangle[c]) - (triangle[a]))))                             .real());             if (d < 0) goto next;             if (d == 0) {               if (!compare((hypot((((triangle[b]) - (triangle[a]))).real(),                                   (((triangle[b]) - (triangle[a]))).imag())),                            (hypot((((triangle[c]) - (triangle[a]))).real(),                                   (((triangle[c]) - (triangle[a]))).imag())))) {                 {                   complex<double> p = ((triangle[a]) - (triangle[b]));                   complex<double> m = ((triangle[c]) - (triangle[b]));                   complex<double> _4th = conj(p / m) * m;                   if (pnts.find(_4th) == pnts.end()) goto next;                   {                     complex<double> center =                         (((triangle[b]) + (triangle[c])) / 2.0);                     check(center, (hypot((((triangle[0]) - (center))).real(),                                          (((triangle[0]) - (center))).imag())));                   }                 }               }               goto next;             }           }           {             complex<double> center =                 findCenter(triangle[0], triangle[1], triangle[2]);             check(center, (hypot((((triangle[0]) - (center))).real(),                                  (((triangle[0]) - (center))).imag())));           }         next:;         }     printf( %.17lf n , ans);     return 0;   }