#abc286h. [abc286_h]Don't Swim

[abc286_h]Don't Swim

問題文

二次元平面上に NN 頂点の凸多角形 CC 、点 S=(sx,sy),T=(tx,ty)S=(s_x, s_y), T=(t_x,t_y) があります。 CC の頂点は、反時計回りに (x1,y1),(x2,y2),ldots,(xN,yN)(x_1,y_1),(x_2,y_2),\\ldots,(x_N,y_N) です。 S,TS,TCC の外部にあることが保証されています。

CC の外周を除いた内部を通らずに点 SS から点 TT まで移動するときの最短距離を求めてください。

制約

  • 3leqNleq1053\\leq N \\leq 10^5
  • xi,yi,sx,sy,tx,tyleq109|x_i|,|y_i|,|s_x|,|s_y|,|t_x|,|t_y|\\leq 10^9
  • (x1,y1),(x2,y2),ldots,(xN,yN)(x_1,y_1),(x_2,y_2),\\ldots,(x_N,y_N) は反時計回りに凸多角形をなす
  • CC のどの 33 点も同一直線上にない
  • S,TS,TCC の外部に存在し、CC の外周上にない
  • 入力は全て整数

入力

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

NN x1x_1 y1y_1 x2x_2 y2y_2 vdots\\vdots xNx_N yNy_N sxs_x sys_y txt_x tyt_y

出力

答えを出力せよ。

なお、真の値との絶対誤差または相対誤差が 10610^{-6} 以下であれば正解として扱われる。


入力例 1

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

出力例 1

5.65028153987288474496

最短距離を達成する移動方法の一例を以下の図で示します。

image

(0,2)to(1,3)to(3,3)to(5,2)(0,2) \\to (1,3) \\to(3,3)\\to(5,2) と移動すると、点 SS から点 TT への移動距離が 5.650281...5.650281... となり、これが最小であることが証明できます。 CC の外周上は通れることに注意してください。

なお、絶対誤差または相対誤差が 10610^{-6} 以下であれば正解として扱われるので、5.650287 などと出力しても正解と判定されます。


入力例 2

3
0 0
2 0
1 10
3 7
10 3

出力例 2

8.06225774829854965279