/*
同样的代码稍微修改下交2112 就是错的,为何最近总是碰到这么奇怪的事情??
第一次写map hash
*/
#include <iostream>//2563607 2010-06-30 18:13:26 Accepted 1874 46MS 4292K 1720 B C++ 悔惜晟
#include <map>
#include <cstdio>
#include <string>
using namespace std;
const int N = 1008;
const int MAX = 0x3fffffff;
int dis[N];
int cost[N][N];
bool hash[N];
map<string, int> df;
void Dijsktra(int len, string s, string end)
{
int i, j, k;
for(i = 1; i < len; i++)
{
dis[i] = cost[df[s]][i];
}
//printf("%d==/n",len);
memset(hash, false, sizeof(hash));
hash[df[s]] = true;
dis[df[s]] = 0;
for(i = 2; i < len; i++)
{
int d = MAX;
k = df[s];
for(j = 1; j < len; j++)
if(!hash[j] && d > dis[j])
{
k = j;
d = dis[j];
}
hash[k] = true;
for(j = 1; j < len; j++)
if(!hash[j] && dis[j] > dis[k] + cost[k][j])
dis[j] = dis[k] + cost[k][j];
}
if(dis[df[end]] != MAX)
cout<<dis[df[end]]<<endl;
else
cout<<"-1"<<endl;
}
int main()
{
int i, j, len, n, m, t;
string ss, en;
string start, end;
while(cin>>m>>n && n != -1)
{
len = 1;
for(i = 0; i < N; i++)
for(j = 0; j < N; j++)
{
cost[i][j] = MAX;
}
for(i = 0; i < n; i++)
{
cin>>ss>>en>>t;
if(!(df[ss]))
{
df[ss] = len;
len++;
//printf("%d===/n", len);
}
if(!(df[en] ))
{
df[en] = len;
len++;
//printf("%d===/n", len);
}
//cout<<len<<endl;
//printf("%d %d/n", df[ss], df[en]);
if (t < cost[df[ss]][df[en]])
{
cost[df[ss]][df[en]] = t;
cost[df[en]][df[ss]] = t;
}
}
cin>>ss>>en;
if(!(df[ss]))
{
df[ss] = len;
len++;
//printf("%d===/n", len);
}
if(!(df[en] ))
{
df[en] = len;
len++;
//printf("%d===/n", len);
}
//cout<<len<<endl;
Dijsktra(len, ss, en);
df.clear();
}
}