import itertools
import math
def dist(A,B):
    return (A[0]-B[0])**2 + (A[1]-B[1])**2
def circumcenter(data):
    #coordinates
    (x1, y1), (x2, y2), (x3, y3) = data
    
    #length of each side squared and area of the triangle
    a2 = (x2 - x3) **2 + (y2 -y3) ** 2 
    b2 = (x1 - x3) **2 + (y1 -y3) ** 2
    c2 = (x2 - x1) **2 + (y2 -y1) ** 2
    L = sorted([a2,b2,c2])
    #print(L)
    if L[2] >= L[1]+ L[0]:
        # print("donkaku")
        if a2 == L[2]:
            x,y = (x2+x3)/2, (y2+y3)/2
            r = math.sqrt(dist([x2,y2],[x3,y3]))/2
        elif b2 == L[2]:
            x,y = (x1+x3)/2, (y1+y3)/2
            r = math.sqrt(dist([x1,y1],[x3,y3]))/2
        elif c2 == L[2]:
            x,y = (x1+x2)/2, (y1+y2)/2
            r = math.sqrt(dist([x1,y1],[x2,y2]))/2
        return (x,y),r
    else:
        "eikaku"
        area = ((x2 - x1) * (y3 -y1) - (x3 -x1) * (y2- y1)) / 2

        #is_triangle
        if area == 0:
            return None

        #circumcenter coordinate and radius      
        x = (a2*(b2+c2-a2)*x1 + b2*(c2+a2-b2)*x2 + c2*(a2+b2-c2)*x3) / (16*area*area)
        y = (a2*(b2+c2-a2)*y1 + b2*(c2+a2-b2)*y2 + c2*(a2+b2-c2)*y3) / (16*area*area) 
        r =  math.sqrt(((x1-x)**2 + (y1-y)**2))

        #return the equation
        return (x,y),r

def signed_area(p1, p2, p3):
    '''符号付き面積を計算 '''

    area = (((p2[0] - p1[0]) * (p3[1] - p1[1])) - ((p3[0] - p1[0]) * (p2[1] - p1[1]))) / 2
    return area
def convex_hull(p_list):
    '''グラハムの凸包走査 '''

    p_sort = []
    for i in p_list:
        p_sort.append(i[0])

    # x座標が最小のものをリストの先頭に配置。
    min_index = p_sort.index(min(p_sort))
    min_p = p_list.pop(min_index)
    p_list.insert(0, min_p)

    # 座標最小の点と他の点との角度順にソート ソートアルゴリズムに選択の余地が有る。
    p_length = len(p_list)
    count = 0
    index = 0
    while True:
        count += 1
        index += 1

        area_sign = signed_area(p_list[0], p_list[index], p_list[index + 1])

        # 符号付き面積が負ならば点を入れ替え
        if area_sign < 0:
            p_list[index], p_list[index + 1] = p_list[index + 1], p_list[index]
            count = 0

        if count == p_length - 1:
            break

        if index == p_length - 2:
            index = 0

    # 凹部の点を削除する。
    index = -1
    count = 0
    while True:
        index += 1
        count += 1

        area_sign = signed_area(p_list[index], p_list[index + 1], p_list[index + 2])
        if area_sign < 0:
            del p_list[index + 1]
            count = 0

        if count == len(p_list):
            break

        if index >= len(p_list) - 3:
            index = -1
    return p_list

N=int(input())
#X=[]
#Y=[]
Z=[]
for _ in range(N):
    i,j= map(int,input().split())
    Z.append((i,j))
    #X.append(i)
    #Y.append(j)

if N == 2:
    print(math.sqrt(dist(Z[0],Z[1]))/2)
else:
    min_r = -1
    for three in itertools.combinations(Z,3):
        try:
            center, r = circumcenter(three)
            #print(three,center,r)
            for z in Z:
                if math.sqrt(dist(center,z)) > r:
                    break
            else:
                if min_r == -1:
                    min_r = r
                if r < min_r:
                    print(r,min_r)
                    min_r = r
        except:
            pass
    print(min_r)

Measured memory_bytes: 53996