이산 속도

아직 제출이 없습니다시간 제한8초메모리 제한128 MB

문제

마찰이 전혀 없는 어떤 나라에서의 자동차 여행을 생각하자. 이 나라의 자동차에는 엔진이 없다. 자동차가 일단 어떤 속도로 움직이기 시작하면 계속 같은 속도로 움직인다. 도로 위의 일부 지점에는 가속 장치가 있어서, 자동차는 그곳에서 속도를 $1$만큼 올리거나 내릴 수 있고, 그대로 유지할 수도 있다. 이 문제에서 여러분이 할 일은 출발 도시에서 목표 도시까지 가는 데 걸리는 시간이 가장 짧은 경로를 구하는 프로그램을 작성하는 것이다.

이 나라에는 여러 도시가 있고, 이들을 잇는 도로망이 있다. 모든 도시에는 가속 장치가 있다. 따라서 자동차가 속도 $v$로 어떤 도시에 도착하면, 그 도시를 떠날 때의 속도는 $v-1$, $v$, $v+1$ 중 하나이다. 출발 도시를 떠나는 첫 번째 도로는 반드시 속도 $1$로 달려야 한다. 마찬가지로 목표 도시로 들어오는 마지막 도로도 반드시 속도 $1$로 달려야 한다.

자동차가 어떤 도시에 도착하면, 그 도시로 들어올 때 사용한 도로로 곧바로 되돌아갈 수는 없다(U턴 금지). 이 제약을 제외하면 도로망 위에서 어떤 경로든 선택할 수 있다. 같은 도시를 여러 번 방문하거나 같은 도로를 여러 번 사용해도 된다. 출발 도시와 목표 도시도 여행 도중에 지나갈 수 있다.

각 도로에는 거리와 제한 속도가 주어진다. 자동차는 각 도로를 그 도로의 제한 속도 이하의 속도로 달려야 하며, 속도는 항상 양의 정수이다. 한 도로를 달리는 데 걸리는 시간은 그 도로의 거리를 사용한 속도로 나눈 값이다. 도시 안에서 걸리는 시간(가속·감속에 드는 시간 포함)은 무시한다.

입력

입력은 여러 개의 데이터셋으로 이루어진다. 각 데이터셋의 형식은 다음과 같다.

n m
s g
x1 y1 d1 c1
...
xm ym dm cm

모든 값은 음이 아닌 정수이며, 같은 줄에 있는 값들은 공백 하나로 구분된다.

첫째 줄은 도로망의 크기를 나타낸다. $n$은 도시의 수로 $2 \le n \le 30$이다. $m$은 도로의 수이며 $0$일 수도 있다.

둘째 줄은 여행 정보를 나타낸다. $s$는 출발 도시의 번호, $g$는 목표 도시의 번호이며 $s \ne g$이다. 데이터셋에 나오는 모든 도시 번호는 $1$ 이상 $n$ 이하이다.

이어지는 $m$개의 줄은 각 도로의 정보를 나타낸다. $i$번째 도로는 도시 $x_i$와 $y_i$를 잇고, 거리는 $d_i$($1 \le d_i \le 100$), 제한 속도는 $c_i$($1 \le c_i \le 30$)이다. 같은 도시 쌍을 잇는 도로는 둘 이상 존재하지 않으며, 어떤 도로도 한 도시를 자기 자신과 잇지 않는다. 모든 도로는 양방향으로 통행할 수 있다.

입력의 끝은 공백으로 구분된 두 개의 $0$이 적힌 줄로 나타낸다.

출력

각 데이터셋마다 정확히 한 줄을 출력한다.

출발 도시에서 목표 도시에 도달할 수 있다면, 가장 빠른 경로의 시간을 소수점 아래 정확히 다섯 자리까지 반올림하여 출력한다(버리는 자리의 값이 $5$이면 올린다). 도달할 수 없다면 모두 소문자로 된 문자열 unreachable을 출력한다.

공백 등 불필요한 문자는 출력하지 않는다.