Map+Dijksrta
#include<stdio.h>
#include<iostream>
#include<cstdio>
#include<string.h>
#include<map>
#include<string>
#define M 10000000
#define m 10005
#define mb 199
using namespace std;
int n,dis[mb],vis[mb],ma[mb][mb],i,j,k,mi,c,t,l;
char s1[mb],s2[mb],s3[mb],s4[mb];
int main()
{
while(scanf("%d",&n)!=EOF&&n!=-1)
{
l=1;
map<string,int>df;
for(i=0;i<mb;i++)
{for(j=0;j<mb;++j)
{ ma[i][j]=M;}}
scanf("%s%s",s3,s4);
df[s3]=l;
l++;
for(i=0;i<n;++i)
{
scanf("%s%s%d",s1,s2,&t);
if(df[s1]==0)
{j=df[s1]=l++;}
else
{j=df[s1];}
if(df[s2]==0)
{k=df[s2]=l++;}
else
{k=df[s2];}
if(ma[j][k]>t)
{ma[j][k]=ma[k][j]=t;}
}
memset(vis,0,sizeof(vis));
for(i=1;i<l;++i){dis[i]=M;}
dis[df[s3]]=0;
for(i=0;i<=l;i++)
{
mi=M;
k=-1;
for(j=1;j<l;j++)
{if(!vis[j]&&mi>dis[j])
{mi=dis[j];k=j;}}
if(mi==M)break;
vis[k]=1;
for(j=1;j<l;++j)
{if(!vis[j]&&dis[j]>dis[k]+ma[k][j])
{dis[j]=dis[k]+ma[k][j];}
}
}
if(df[s4]==0||dis[df[s4]]==M)
{printf("-1\n");}
else
printf("%d\n",dis[df[s4]]);
df.clear();
}
return 0;
}