/*就是求所有边中最小边的最大值。
相对应的就是求所有边中最大边的最小值,就是frogger。
该题的转移方程就是:dist[j]=max(dist[j],min(dist[k],map[k][j]));*/
#include <stdio.h>
#include <string>
#include <iostream>
#include <cstring>
#include <map>
#define inf 99999999
using namespace std;
int edge[201][201];
int dist[201];
bool vis[201];
int main()
{
map<string,int> v;
int n,m,c,u,vv,s,e,k;
string a,b;
int ca=1;
while(scanf("%d%d",&n,&m)==2&&(n+m))
{
v.clear();
memset(vis,false,sizeof(vis));
memset(edge,0,sizeof(edge));
memset(dist,0,sizeof(dist));
int cnt=1;
while(m--)
{
cin >> a >> b >> c;
if(v[a]==0)
v[a]=cnt++;
if(v[b]==0)
v[b]=cnt++;
u=v[a];
vv=v[b];
edge[u][vv]=edge[vv][u]=c;
}
cin >> a >> b;
s=v[a];
e=v[b];
dist[s]=inf;
for(int i=1;i<=cnt;i++)
{
int m=0;
for(int j=1;j<=cnt;j++)
{
if(dist[j]>m&&!vis[j])
{
k=j;
m=dist[j];
}
}
vis[k]=true;
for(int j=1;j<=cnt;j++)
{
if(!vis[j]&&edge[k][j]>0)
dist[j]=max(dist[j],min(dist[k],edge[k][j]));
}
}
printf("Scenario #%d\n",ca++);
printf("%d tons\n\n",dist[e]);
}
return 0;
}