Problem:
Score : 600 points

Problem Statement

Takahashi wants to grill N pieces of meat on a grilling net, which can be seen as a two-dimensional plane. The coordinates of the i-th piece of meat are \left(x_i, y_i\right), and its hardness is c_i.

Takahashi can use one heat source to grill the meat. If he puts the heat source at coordinates \left(X, Y\right), where X and Y are real numbers, the i-th piece of meat will be ready to eat in c_i \times \sqrt{\left(X - x_i\right)^2 + \left(Y-y_i\right)^2} seconds.

Takahashi wants to eat K pieces of meat. Find the time required to have K or more pieces of meat ready if he put the heat source to minimize this time.

Constraints

All values in input are integers.

1 \leq N \leq 60

1 \leq K \leq N

-1000 \leq x_i , y_i \leq 1000

\left(x_i, y_i\right) \neq \left(x_j, y_j\right) \left(i \neq j \right)

1 \leq c_i \leq 100

Input

Input is given from Standard Input in the following format:

N K
x_1 y_1 c_1
\vdots
x_N y_N c_N

Output

Print the answer.

It will be considered correct if its absolute or relative error from our answer is at most 10^{-6}.

Sample Input 1

4 3
-1 0 3
0 0 3
1 0 2
1 1 40

Sample Output 1

2.4

If we put the heat source at \left(-0.2, 0\right), the 1-st, 2-nd, and 3-rd pieces of meat will be ready to eat within 2.4 seconds. This is the optimal place to put the heat source.

Sample Input 2

10 5
-879 981 26
890 -406 81
512 859 97
362 -955 25
128 553 17
-885 763 2
449 310 57
-656 -204 11
-270 76 40
184 170 16

Sample Output 2

7411.2252

Solution in Fortran (GNU Fortran 9.2.1) (judge verdict: Wrong Answer)

program yakiniku_optimization_problem
  implicit none
  real(8), parameter :: tol = 1e-7
  integer :: n, k, i, j
  real(8) :: l = 0.d0, r = 1e6, m, xc, yc, s, t, u, v, w, z, ri, rj
  real(8), dimension(60) :: x = 0.d0, y = 0.d0, c = 0.d0
  character(64) :: ans
  read(*,*) n, k
  do i = 1, n
    read(*,*) x(i), y(i), c(i)
    c(i) = 1.d0 / c(i)
  end do
  do while (r - l > tol)
    m = 0.5 * (l + r)
    do i = 1, n
      if (ok(x(i), y(i))) then
        r = m
        goto 100
      end if
      ri = m * c(i)
      do j = i + 1, n
        rj = m * c(j)
        z = d(x(i), x(j), y(i), y(j))
        if (z > ri + rj .or. z < abs(rj - ri)) cycle
        s = 2 * (x(j) - x(i))
        t = 2 * (y(j) - y(i))
        u = x(i) * x(i) - x(j) * x(j) + y(i) * y(i) - y(j) * y(j) + rj * rj - ri * ri
        v = s * s + t * t
        w = abs(s * x(i) + t * y(i) + u)
        z = sqrt(v * ri * ri - w * w)
        xc = (s * w - t * z) / v + x(i)
        yc = (t * w + s * z) / v + y(i)
        if (ok(xc, yc)) then
          r = m
          goto 100
        end if
        xc = (s * w + t * z) / v + x(i)
        yc = (t * w - s * z) / v + y(i)
        if (ok(xc, yc)) then
          r = m
          goto 100
        end if
      end do
    end do
    l = m
  100 end do
  write(ans,'(f32.16)') r
  write(*,'(a)') trim(adjustl(ans))
contains
  real(8) function d(x1, x2, y1, y2) result(res)
    real(8), intent(in) :: x1, x2, y1, y2
    real(8) :: dx, dy
    dx = x2 - x1
    dy = y2 - y1
    res = sqrt(dx * dx + dy * dy)
  end
  logical function ok(xd, yd) result(res)
    real(8), intent(in) :: xd, yd
    integer :: i, cnt
    cnt = 0
    do i = 1, n
      if (d(xd, x(i), yd, y(i)) <= m * c(i)) cnt = cnt + 1
    end do
    res = cnt >= k
  end
end program yakiniku_optimization_problem