//题意就不说了,题也是个水题,但是值得注意的就是要清空//
#include<stdio.h>
#include<string.h>
#include<string>
#include<algorithm>
using namespace std;
#include<map>
map<string,int>a;
const int inf=1<<29;
char s1[151],s2[151];
char r1[151],r2[151];
int w[155][155],vis[155],d[155];
int n,m,p;
void dij(int st,int ed)
{
int i,j;
memset(vis,0,sizeof(vis));
for(i=st; i<=ed; i++)
{
d[i]=w[st][i];
}
d[st]=0;
vis[st]=1;
for(i=st; i<=ed; i++)
{
int now=inf,x;
for(j=st; j<=ed; j++)
{
if(!vis[j]&&d[j]<now)
{
now=d[j];
x=j;
}
}
vis[x]=1;
for(j=st; j<=ed; j++)
{
if(!vis[j]&&d[j]>d[x]+w[x][j])
{
d[j]=d[x]+w[x][j];
}
}
}
}
int main()
{
while(scanf("%d",&n)!=EOF&&n!=-1)
{
int i,j;
for(i=1; i<=152; i++)
{
for(j=1; j<=152; j++)
{
if(i==j)
{
w[i][j]=0;
}
else
{
w[i][j]=inf;
}
}
}
scanf("%s%s",r1,r2);
int ok=1;
if(strcmp(r1,r2)==0)
{
ok=0;
}
a.clear();//必须清空,不清空,导致map里面的东西越来越多,查的越来越慢
a[r1]=1,a[r2]=2;
m=3;
for(i=0; i<n; i++)
{
scanf("%s%s%d",s1,s2,&p);
if(!a[s1])
a[s1]=m++;
if(!a[s2])
a[s2]=m++;
if(p<w[a[s1]][a[s2]])
w[a[s1]][a[s2]]=w[a[s2]][a[s1]]=p;
}
if(!ok)
{
printf("0\n");
}
else
{
dij(1,m);
if(d[a[r2]]==inf)
{
printf("-1\n");
}
else
{
printf("%d\n",d[a[r2]]);
}
}
}
return 0;
}