ロボット工学の研究者であるアシモフ博士は、新しいロボットの開発に成功した。このロボットは、床に張り巡らせた特殊なワイヤーに沿って自由に動くことができる。ロボットは常に現在いるワイヤーに平行な方向を向いて前進する。
すばらしいことに、このロボットはワイヤー上を移動するためにその距離にかかわらずエネルギーを消費しない。しかし、ワイヤーの端点やワイヤーの交点で向きを変えるためにはその点を中心に回転する必要があり、その回転角度だけエネルギーを消費する。
このロボットをスタート地点からゴール地点まで動かしたい。例えば、下図においてロボットを start に東向き(下図 x軸の正の向き)で配置し goal まで動かしてみよう。start から交点 A 交点 B を経由して goal にたどり着く経路と、交点 A 交点 C を経由する経路があるが、前者の方が移動距離が長いものの回転角度が少ないためエネルギー消費量は少ない。
あなたの仕事は、床にあるワイヤーの位置、スタート地点、ゴール地点を読み込み、スタート地点からゴール地点へ移動するために必要な回転角度の合計の最小値を報告するプログラムを作成することである。
ロボットはスタート地点においてどのような向きに配置してもよく、ゴール地点ではどの方向を向いていてもよい。
入力は複数のデータセットからなる。各データセットの形式は以下のとおり:
n x11 y11 x21 y21 x12 y12 x22 y22 . . . x1n y1n x2n y2n sx sy gx gy
n はワイヤーの数を示す整数である。x1i y1i は i 番目のワイヤーの一方の端点の座標、x2i y2i は i 番目のワイヤーのもう一方の端点の座標を示す。
sx sy、gx gy はそれぞれスタート地点とゴール地点の座標を示す。
与えられる座標はすべて整数値であり、x軸 y軸の値は -1000 以上 1000 以下である。また、スタート地点とゴール地点は与えられるワイヤーの端点上にあると仮定してよい。
n ≤ 50 であると仮定してよい。
n が 0 のとき入力の終了を示す。
各データセットに対して、回転角度の合計の最小値を1行に出力せよ。ロボットがゴール地点にたどり着けない場合は "-1" と出力せよ。出力は 0.00001 以下の誤差を含んでもよい。
8 1 3 11 3 5 3 13 11 10 10 17 10 11 2 11 6 10 5 14 5 13 6 13 2 17 10 17 3 13 3 19 3 1 3 19 3 6 1 3 11 3 5 3 13 11 10 10 17 10 11 2 11 6 10 5 14 5 13 3 19 3 1 3 19 3 2 0 0 7 0 3 0 7 3 0 0 7 3 0
270.0000 -1 36.86989765