program ABC151F
    use iso_fortran_env
    implicit none
    integer::N
    real(real128)::x,y
    complex(real128),allocatable,dimension(:)::Points
    complex(real128),allocatable,dimension(:,:,:)::cross
    real(real128)::ok,ng,med
    real(real128)::pi
    integer::i
    pi=4.0*atan(1.0)
    read*,N
    allocate(Points(N),cross(N,N,2))
    do i=1,N
        read*,x,y
        Points(i)=x+y*(0.0,1.0)
    end do
    ok=2000;ng=0
    med=(ok+ng)/2
    do while(ok-ng>=10**(-10.0))
        if(Rcheck(med))then
            ok=med
        else
            ng=med
        endif
        med=(ok+ng)/2
    end do
    print"(f0.20)",ok
contains
logical function Rcheck(R)
    real(real128)::R
    integer::i,j,k,l
    logical::Pcheck
    call getcross(R)
    Rcheck=.false.
    do i=1,N-1
        do j=i+1,N
            do l=1,2
                Pcheck=.true.
                do k=1,N
                    if(i==k.or.j==k)then
                        if(abs(Points(i)-Points(j))>R*2+0.0000001)Pcheck=.false.
                    else
                        if(abs(cross(i,j,l)-Points(k))>R)Pcheck=.false.
                    endif
                end do
                Rcheck=Rcheck.or.Pcheck
            end do
        end do
    end do
end function

subroutine getcross(R)
    real(real128)::R
    integer::i,j
    real(real128)::H
    cross=(5000,5000)
    do i=1,N-1
        do j=i+1,N
            if(abs(Points(i)-Points(j))>2.0*R)exit
            H=sqrt(R**2-ABS((Points(i)-Points(j))/2)**2)
            cross(i,j,1)=(Points(i)+Points(j))/2 + &
            & H*exp((0.0,1.0)*(atan2(AIMAG(Points(j)-Points(i)), REAL(Points(j)-Points(i)))+pi/2))
            cross(i,j,2)=(Points(i)+Points(j))/2  &
            & +H*exp((0.0,1.0)*(atan2(AIMAG(Points(j)-Points(i)), REAL(Points(j)-Points(i)))-pi/2))
        end do
    end do
end subroutine
end program ABC151F