#include<cstdio> #include<iostream> #include<algorithm> #include<cmath> struct Point{int x,y;}pnt[1000]; int n,res[1000]; bool cross(const Point &sp,const Point &ep,const Point &op){return (sp.x - op.x)*(ep.y-op.y) > (ep.x - op.x) *(sp.y - op.y);} bool cmp(const Point &l, const Point &r){return l.y < r.y || (l.y == r.y && l.x < r.x);} double dis(const Point &a, const Point &b){return sqrt((a.x - b.x)*(a.x - b.x)+(a.y - b.y)*(a.y - b.y));} int graham() { int len,k = 0, top = 1; std::sort(pnt,pnt+n,cmp); res[0] = 0,res[1] = 1, res[2] = 2; for(int i = 2; i < n; i ++) { while(top && cross(pnt[i], pnt[res[top]], pnt[res[top-1]])) top --; res[++top] = i; } len = top; res[++top] = n-2; for(int i = n-3; i >= 0; i --) { while(top != len && cross(pnt[i],pnt[res[top]],pnt[res[top-1]])) top --; res[++top] = i; } return top; } int main() { while(scanf("%d",&n)!=EOF) { for(int i = 0; i < n; ++ i) scanf("%d%d",&pnt[i].x, &pnt[i].y); int t = graham(); double ans = 2*acos(-1); for(int i = 1; i < t; ++ i) ans += dis(pnt[res[i]],pnt[res[i-1]]); ans += dis(pnt[res[0]],pnt[res[t-1]]); printf("%.2lf/n",ans); } return 0; }