009 - 連環迷路

時間制限 1 秒 / メモリ制限 256 MB / 得点 10 / x 0 /


TLE
1sec
MLE
256MB
得点
10

問題

PCK君は連環迷路で遊んでいる。連環迷路は、座標平面上にある$N$個の円から成り、1つ以上の円の周は原点を通っている。この迷路では、原点をスタート地点として、円の周上だけをたどって移動する。もし、現在たどっている円Aと別の円Bが共有点を持てば、円Aの周上でその共有点まで移動することで円Bの周上に移ることができる。


連環迷路のゴール地点は、$N$個の円の周上のうち、スタート地点からの周上に沿った最短の移動距離が最も大きい点である。たとえば、右図のように、中心が(0, 1)にあり半径が1である円Aと、中心が(0, 2)にあり半径が1である円Bがあるとき、スタート地点は円Aの円周上にある。図に示す通り、円Aと円Bの交点は二つある。図中の★印以外で、円周上にあるどの点も、スタート地点からの最短の経路に沿った移動距離は★印よりも近いので、この場合のゴール地点は★印で示した点である。PCK君は、スタート地点からゴール地点までの経路の最短距離を求めたい。

$N$個の円の情報が与えられたとき、スタート地点からゴール地点までの最短距離を求めるプログラムを作成せよ。

入力

入力は以下の形式で与えられる。

$N$
$x_1$ $y_1$ $r_1$
$x_2$ $y_2$ $r_2$
:
$x_N$ $y_N$ $r_N$

1行目に円の数$N$ ($1 \leq N \leq 100$)が与えられる。続く$N$行に、各円の中心のx座標とy座標$x_i,y_i$ ($-10,000 \leq x_i,y_i \leq 10,000$)と半径$r_i$ ($1 \leq r_i \leq 10,000$)が、整数で与えられる。ただし、中心の座標と半径が同じ円は与えられない($i \ne j$なら、$x_i \ne x_j$ または$y_i \ne y_j$ または$r_i \ne r_j$)。スタート地点がある円から、いくつかの円をたどることで、どの円の周上にも到達できる。また、円同士が共有点を持たない場合、それら2つの円の周上の最近接点同士は、0.0001以上離れているとする。

出力

最短距離を実数で1行に出力する。ただし、誤差がプラスマイナス 0.0001を超えてはならない。この条件を満たせば小数点以下は何桁表示してもよい。

入出力例

入力例1

2
1 0 1
3 0 1

出力例1

6.28318531

入力例2

4
1 0 1
3 0 1
2 2 1
4 2 2

出力例2

10.35207318

入力例3

2
0 1 1
0 2 1

出力例3

4.1887902