에너지 아끼기
시간 제한8초메모리 제한512 MB
3차원 공간의 무한 직선 N개가 주어질 때, 직선 위 이동은 공짜이고 직선을 벗어난 이동에만 거리가 드는 상황에서 출발점과 도착점 사이의 최소 에너지를 구한다.
문제
마법 함정에 걸려 원인 모를 이유로 낯선 공간으로 이동했다. 이 공간은 3차원이고, 길이가 무한인 직선 경로가 여러 개 있다. 특별한 능력으로 출구가 어디인지 알아냈지만, 그곳까지 가는 일은 그리 쉽지 않다. 경로를 따라 이동할 때는 에너지를 쓰지 않고 자유롭게 움직일 수 있지만, 경로를 벗어나 이동할 때는 에너지를 써야 한다. 거리 1당 에너지 1이 필요하다. 에너지를 아끼고 싶은 당신은 컴퓨터의 도움을 받아 출구까지 가는 최적의 경로를 찾기로 했다.
주어진 출발점과 도착점 사이를 이동하는 데 필요한 최소 에너지를 계산하는 프로그램을 작성하시오. 각 경로의 폭은 무시할 수 있을 만큼 작고, 당신의 크기도 마찬가지다.
입력
입력은 여러 개의 데이터 세트로 이루어진다. 각 데이터 세트의 형식은 다음과 같다.
N
xs ys zs xt yt zt
x1,1 y1,1 z1,1 x1,2 y1,2 z1,2
.
.
.
xN,1 yN,1 zN,1 xN,2 yN,2 zN,2
N은 직선 경로의 개수를 나타내는 정수이다(2 ≤ N ≤ 100). (xs, ys, zs)와 (xt, yt, zt)는 각각 출발점과 도착점의 좌표이다. (x**i,1, y**i,1, z**i,1)와 (x**i,2, y**i,2, z**i,2)는 i번째 직선 경로가 지나는 두 점의 좌표이다. 모든 좌표의 절댓값은 30,000을 넘지 않는다.
두 점 (xu, yu, zu)와 (xv, yv, zv) 사이의 거리는 유클리드 거리로 다음과 같이 주어진다.
출발점과 도착점은 모두 경로 위에 있다. 또한 각 데이터 세트에는 거의 평행하지만 실제로는 평행하지 않은 직선 경로가 존재하지 않는다. 완전히 평행한 직선 경로는 존재할 수 있다.
입력의 끝은 0 하나만 있는 줄로 나타낸다. 이 줄은 어떤 데이터 세트에도 속하지 않는다.
출력
각 데이터 세트마다 필요한 에너지를 한 줄에 출력한다. 각 값은 소수점 이하 자릿수를 임의로 출력해도 되지만, 오차가 0.001을 넘어서는 안 된다.