if(d[E[e].v] > tmp){
d[E[e].v] = tmp;
if(!inq[E[e].v]){
inq[E[e].v]=true;
q.push(E[e].v);
}
}
}
}
return d[end];
}
int main(){
int cas=1,u,v,h,l,start,end,hh;
while(~scanf("%d%d",&n,&m) && n+m){
if(cas!=1)puts("");
init();
for(int i=0; i
addEdge(u,v,h,l);
addEdge(v,u,h,l);
}
scanf("%d%d%d",&start,&end,&hh);
int ans,ans_h=0,ans_len=INF,left=0, right=hh+1;
while(left
ans=SPFA(start, end);
if(ans!=INF){
left=limit+1;
if(limit>ans_h){
ans_h=limit;
ans_len=ans;
}
else if(limit==ans_h&&ans
}
}
else{
right=limit;
}
}
printf("Case %d:\n",cas++);
if(ans_len==INF){
puts("cannot reach destination");
}
else{
printf("maximum height = %d\n", ans_h);
printf("length of shortest route = %d\n", ans_len);
}
}
return 0;
}