void convex_hull(poly &v,poly &p) { p.clear() ; sort(v.begin(),v.end()) ; v.resize(unique(v.begin(),v.end())-v.begin()) ; int n=v.size() ; int sz=0 ; for(int i=0;i<n;i++) { while(sz>=2 && dcmp(cross(st[sz-2],st[sz-1],v[i]))<0) sz-- ; st[sz++]=v[i] ; } for(int i=0;i<sz;i++) p.push_back(st[i]) ; sz=0 ; for(int i=0;i<n;i++) { while(sz>=2 && dcmp(cross(st[sz-2],st[sz-1],v[i])>0)) sz-- ; st[sz++]=v[i] ; } for(int i=sz-1;i>=0;i--) { if(i==sz-1 && st[i]==p.back()) continue ; if(i==0 && st[i]==p[0]) continue ; p.push_back(st[i]) ; } }
void read( poly& pp , string ss , LL mod ){ pp.clear(); if( ss[ 0 ] != '-' ) ss = '+' + ss; size_t st = 0; while( st < ss.length() ){ size_t lst = st; st ++; while( st < ss.length() and ss[ st ] != '+' and ss[ st ] != '-' ) st ++; pp.push_back( parse( ss , lst , st , mod ) ); } }
int main(void) { int x, y, i, k = 0; point p; while (1) { cin >> n >> m; if (n == 0 && m == 0) break; saplings.clear(); for (i = 0; i < n; ++i) { cin >> x >> y; p = point(x,y); saplings.push_back(p); } printf("Case %d: length = %.2f\n", ++k, solve()); } return 0; }