# n個の点全てを含む円のうち半径が最小である円の
# 中心座標と半径を求める
class SolvCircle

  LOOP_MAX = 100

  # 移動距離がこの値以下になったら処理を終了させる
  CONVRGV = 1.0e-9

  #
  #=== 円の中心座標と半径を求める
  #
  #_pt_x_ :: n個の点のx座標の配列
  #_pt_y_ :: n個の点のy座標の配列
  #
  #返り値::配列を返す。[中心点のx座標, 中心点のy座標, 円の半径]
  #
  def solv_circle(pt_x, pt_y)
    mv_rate  = 0.5 # 移動係数
    max_dist = 0.0 # 中心点から最遠点までの距離
    xsv      = 0.0 # 中心点のx座標
    ysv      = 0.0 # 中心点のy座標
    cx       = 0.0 # 仮中心点のx座標
    cy       = 0.0 # 仮中心点のy座標
    k        = 0
    cvgflg   = false

    while (cvgflg == false)

      LOOP_MAX.times { |t|
        # 最遠点を求める
        max_dist = 0.0
        pt_x.length.times { |i|
          dist = distance(cx, cy, pt_x[i], pt_y[i])
          if (dist > max_dist)
            max_dist = dist
            k        = i
          end
        }

        # 仮の中心点を計算
        cx += (pt_x[k] - xsv) * mv_rate
        cy += (pt_y[k] - ysv) * mv_rate

        # 移動距離が境界値を下回っていればループを抜ける
        if (distance(cx, cy, xsv, ysv) <= CONVRGV)
          cx     = xsv
          cy     = ysv
          cvgflg = true
          break
        end

        xsv = cx
        ysv = cy
      }

      mv_rate /= 2.0

    end

    return [cx, cy, max_dist]
  end

  #
  #=== 二点の距離を求める
  #
  def distance(x1, y1, x2, y2)
    dx = x2 - x1
    dy = y2 - y1
    Math.sqrt(dx * dx + dy * dy)
  end
end

n = gets.chomp.to_i
x,y = n.times.map{gets.split.map(&:to_f)}.transpose

sc = SolvCircle.new()
cx,cy,r = sc.solv_circle(x,y)
puts r
