진자 (Pendulum)

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

문제

벽에 박힌 고리에 실로 매달린 진자를 생각하자. 진자를 밀면 좌우로 왕복하며 흔들린다. 이제 진자의 실이 지나가는 경로 위에, 벽에 박힌 다른 고리들이 놓여 있다고 하자. 실은 이 고리들에 걸려 방향이 꺾이고, 때로는 고리를 완전히 감고 돌기도 한다. 그래서 진자는 이전보다 훨씬 복잡한 궤적을 그린다. 충분한 시간이 지나면 진자의 운동은 반복되어, 하나의 주기 궤도를 따라 움직이게 된다. 진자가 이 주기 궤도를 한 바퀴 도는 동안 이동하는 거리를 구하여라.

좀 더 정확히 정의하자. 벽에 직교 좌표계를 놓고, 실의 한쪽 끝을 원점 $(0, 0)$ 에 고정한다. $x$ 축은 오른쪽, $y$ 축은 위쪽을 향한다. 실의 길이는 $r$ 이다. 진자는 위치 $(-r, 0)$ 에서 놓이며, 따라서 오른쪽으로 흔들리기 시작한다. 평면에는 진자의 경로에 영향을 줄 수 있는 고리가 추가로 $n$ 개 놓여 있다.

다음 이상적인 가정이 성립한다.

  • 고리와 실의 지름은 $0$ 이다.
  • 진자는 (마찰 등으로) 에너지를 잃지 않는다.
  • 진자의 추 자체는 고리에 절대 부딪히지 않으며, 오직 실만 고리에 닿는다.
  • 실은 고리에 닿는 지점에서만 꺾이고, 그 밖에서는 완전히 뻣뻣하여 늘어나지 않는다.

진자의 움직임을 시뮬레이션하여, 진자가 최종적으로 진입하는 주기 궤도의 공간적 길이를 출력하여라. 물리에서 알 수 있듯이, 중력 때문에 진자는 처음 놓인 높이보다 더 높이 올라갈 수 없다. 즉 $x$ 축 위쪽(양의 $y$)으로는 절대 올라가지 못한다. 진자는 결국 처음 높이에 다시 도달하거나, 어떤 고리 주위를 끝없이 돌게 된다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 케이스의 첫 줄에는 고리의 개수를 나타내는 정수 $n$ ($1 \le n < 500$) 과 실의 길이를 나타내는 실수 $r$ 이 주어진다. 이어지는 $n$ 개의 줄에는 각 고리의 $x$ 좌표와 $y$ 좌표를 나타내는 두 정수가 주어진다.

$r = 0$ 인 케이스로 입력이 끝나며, 이 케이스는 처리하지 않는다.

출력

각 케이스마다 먼저 케이스 번호를 담은 줄(Pendulum #1, Pendulum #2, ...)을 출력한다.

그 다음 줄에는 Length of periodic orbit = <거리> 형식으로 진자가 주기 궤도를 한 바퀴 도는 동안 이동하는 거리를 출력한다. 궤도의 시작점에 도달하기까지 이동한 거리는 세지 않는다. <거리> 는 소수점 아래 둘째 자리까지 출력한다.

연속한 테스트 케이스 사이는 빈 줄 하나로 구분한다.