1 #include <bits/stdc++.h>
2
3 using namespace std;
4
5 const int inf = 0x3f3f3f3f;
6 int map1[155][155];
7 int n;
8 int d[155];
9 bool vis[155];
10 void dij(int x, int y)
11 {
12 for(int i=1; i<=y; i++)
13 {
14 d[i]=(i==1?0:inf);
15 }
16 memset(vis, 0, sizeof(vis));
17 for(int i=1; i<=y; i++)
18 {
19 int u, mini=inf;
20 for(int j=1; j<=y; j++)
21 {
22 if(!vis[j]&&d[j]<mini)
23 {
24 mini=d[u=j];
25 }
26 }
27 vis[u]=1;
28 if(mini==inf) break;
29 for(int v=1; v<=y; v++)
30 {
31 if(d[u]+map1[u][v] < d[v])
32 {
33 d[v]=d[u]+map1[u][v];
34 }
35 }
36 }
37 }
38 int main()
39 {
40 while(scanf("%d", &n)!=EOF)
41 {
42 if(n==-1) break;
43 bool Y=0;
44 for(int i=0; i<155; i++)
45 {
46 for(int j=0; j<155; j++)
47 map1[i][j]=(i==j?0:inf);
48 }
49
50 char s1[35], s2[35];
51 scanf("%s%s", s1, s2);
52 if(strcmp(s1, s2)==0) Y=1;
53 map<string, int> rel;
54 rel[s1]=1;
55 rel[s2]=2;
56 int temp=3;
57
58 for(int i=0; i<n; i++)
59 {
60 int d1;
61 char s3[35], s4[35];
62 scanf("%s%s%d", s3, s4, &d1);
63 if(!rel[s3]) rel[s3]=temp++;
64 if(!rel[s4]) rel[s4]=temp++;
65 map1[rel[s3]][rel[s4]]=map1[rel[s4]][rel[s3]]=d1;
66 }
67 if(Y) {printf("0\n"); continue;}
68
69 dij(1, temp);
70 if(d[2]==inf) printf("-1\n");
71 else cout <<d[2]<<endl;
72 }
73
74 return 0;
75 }