https://vjudge.net/problem/UVALive-2730
n!=-1
#include<iostream>
#include<map>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
const int inf=0x3f3f3f3f;
map<char,int> mp;
typedef pair<char,char> E;
const int N=60;
int dis[N];
vector<E> edge;
int w;
char s,t;
int inv(int id,int y){
if(id<26)return y+1;
int x=y*20/19+20;
while(x-ceil(x/20.0)>=y)x--;
return x+1;
}
void gget(int u,int v,bool &f){
if(dis[u]!=inf){
int t=inv(u,dis[u]);
if(dis[v]>t){
dis[v]=t;
f=true;
}
}
}
int main(){
int z=1;
for(int i=0;i<26;i++)
mp['a'+i]=i;
for(int i=0;i<26;i++)
mp['A'+i]=i+26;
int n;
while(scanf("%d",&n),n!=-1){
edge=vector<E>(n);
for(auto &e:edge){
char u,v;
scanf(" %c %c",&u,&v);
e.first=mp[u];
e.second=mp[v];
}
cin>>w>>s>>t;
fill(&dis[0],&dis[0]+N,inf);
dis[mp[t]]=w;
bool f=true;
while(f){
f=false;
for(auto &e:edge){
int u=e.first;
int v=e.second;
gget(u,v,f);
gget(v,u,f);
}
}
printf("Case %d: %d\n",z++,dis[mp[s]]);
}
}