//Templet start
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#include <string>
#include <iostream>
#include <sstream>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <list>
#include <algorithm>
using namespace std;
#define sf scanf
#define pf printf
#define long long lld
#define llu unsigned long long
#define fo(i, n) for(i = 0; i < n; i++)
#define of(i, n) for(i = n - 1; i >= 0; i--)
#define mem(n, v) memset(n, v, sizeof( n ))
#define eps 1e-8
#define INF 5000
#define pb push_back
#define maxn 200+2
#define white 0
#define black 1
typedef pair< int , int > pii;
typedef vector< int > vi;
typedef vector< pii> vii;
int diraction1[ ] = { - 1 , 0 , 0 , 1 , 1 , - 1 , - 1 , 1 } ;
int diraction2[ ] = { 0 , - 1 , 1 , 0 , 1 , - 1 , 1 , - 1 } ;
int horsed1[ ] = { - 2 , - 2 , - 1 , 1 , 2 , 2 , 1 , - 1 } ;
int horsed2[ ] = { 1 , - 1 , - 2 , - 2 , - 1 , 1 , 2 , 2 } ;
//Templet end
void input( ) ;
void reset( ) ;
void BFS( int u) ;
struct data
{
int u, cost;
data( ) { }
bool operator < ( const data& s) const
{
return cost < s.cost ;
}
} ;
int node, edge, parents[ maxn ] , cc[ maxn ] ;
vector < vii> graph;
map < string, int > m;
char s[ 32 ] , e[ 32 ] ;
bool mark[ maxn ] ;
int main( )
{
input( ) ;
return 0 ;
}
void input( )
{
int i, j, k, src, end, cst, res, kag = 0 ;
while ( ~sf( "%d %d" , & node, & edge) )
{
if ( ! node && ! edge) break ;
k = 1 ;
reset( ) ;
// get input
fo( i, edge)
{
mem( s, 0 ) ; mem( e, 0 ) ;
sf( "%s %s %d" , s, e, & cst) ;
if ( ! m[ s ] ) m[ s ] = k++ ;
if ( ! m[ e ] ) m[ e ] = k++ ;
graph[ m[ s ] ] .pb ( pii( m[ e ] , cst) ) ;
graph[ m[ e ] ] .pb ( pii( m[ s ] , cst) ) ;
}
mem( s, 0 ) ; mem( e, 0 ) ;
sf( "%s %s" , s, e) ;
//*******************************
if ( m[ s ] == m[ e ] )
{
pf( "Scenario #%d\n 0 tons\n \n " , ++ kag) ;
continue ;
}
BFS( m[ s ] ) ;
int ss = m[ e ] ;
// find the result
res = cc[ ss ] ;
while ( true )
{
ss = parents[ ss ] ;
if ( ss == m[ s ] )
{
break ;
}
res = min( res, cc[ ss ] ) ;
}
//**********************
pf( "Scenario #%d\n %d tons\n \n " , ++ kag, res) ;
}
}
void BFS( int u)
{
int i, j, tmp, wait;
priority_queue < data> Q;
data x;
x.u = u; x.cost = 0 ;
Q.push ( x ) ;
mark[ u ] = false ;
while ( ! Q.empty ( ) )
{
x = Q.top ( ) ; Q.pop ( ) ;
u = x.u ;
wait = x.cost ;
for ( i = 0 ; i < graph[ u ] .size ( ) ; i++ )
{
pii pr = graph[ u ] [ i ] ;
if ( mark[ pr.first ] )
{
parents[ pr.first ] = u;
cc[ pr.first ] = pr.second ; // i use cc[] for save the paths cost
mark[ pr.first ] = false ;
x.u = pr.first ; x.cost = pr.second ;
Q.push ( x ) ;
if ( pr.first == m[ e ] ) // when i find the end point then stop
{
while ( ! Q.empty ( ) ) Q.pop ( ) ;
i = graph[ u ] .size ( ) ;
}
}
}
}
}
void reset( )
{
m.clear ( ) ;
graph.assign ( node+ 1 , vii( ) ) ;
int i;
for ( i = 1 ; i <= node; i++ )
{
parents[ i ] = - 1 ;
mark[ i ] = true ;
cc[ i ] = - 1 ;
}
mark[ 0 ] = true ;
}
ICAgIC8vVGVtcGxldCBzdGFydAogICAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAgICAjaW5jbHVkZSA8c3RkbGliLmg+CiAgICAjaW5jbHVkZSA8c3RyaW5nLmg+CiAgICAjaW5jbHVkZSA8bWF0aC5oPgogICAgI2luY2x1ZGUgPGN0eXBlLmg+CiAgICAjaW5jbHVkZSA8c3RyaW5nPgogICAgI2luY2x1ZGUgPGlvc3RyZWFtPgogICAgI2luY2x1ZGUgPHNzdHJlYW0+CiAgICAjaW5jbHVkZSA8dmVjdG9yPgogICAgI2luY2x1ZGUgPHF1ZXVlPgogICAgI2luY2x1ZGUgPHN0YWNrPgogICAgI2luY2x1ZGUgPG1hcD4KICAgICNpbmNsdWRlIDxsaXN0PgogICAgI2luY2x1ZGUgPGFsZ29yaXRobT4KCiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwoKICAgICNkZWZpbmUgc2Ygc2NhbmYKICAgICNkZWZpbmUgcGYgcHJpbnRmCiAgICAjZGVmaW5lIGxvbmcgbG9uZyBsbGQKICAgICNkZWZpbmUgbGx1IHVuc2lnbmVkIGxvbmcgbG9uZwogICAgI2RlZmluZSBmbyhpLCBuKSBmb3IoaSA9IDA7IGkgPCBuOyBpKyspCiAgICAjZGVmaW5lIG9mKGksIG4pIGZvcihpID0gbiAtIDE7IGkgPj0gMDsgaS0tKQogICAgI2RlZmluZSBtZW0obiwgdikgbWVtc2V0KG4sIHYsIHNpemVvZiggbiApKQogICAgI2RlZmluZSBlcHMgMWUtOAogICAgI2RlZmluZSBJTkYgNTAwMAogICAgI2RlZmluZSBwYiBwdXNoX2JhY2sKICAgICNkZWZpbmUgbWF4biAyMDArMgoKICAgICNkZWZpbmUgd2hpdGUgMAogICAgI2RlZmluZSBibGFjayAxCgogICAgdHlwZWRlZiBwYWlyPGludCwgaW50PiBwaWk7CiAgICB0eXBlZGVmICB2ZWN0b3I8aW50PiB2aTsKICAgIHR5cGVkZWYgdmVjdG9yPHBpaT4gdmlpOwoKCiAgICBpbnQgZGlyYWN0aW9uMVtdID0gey0xLCAwLCAwLCAxLCAxLCAtMSwgLTEsIDF9OwogICAgaW50IGRpcmFjdGlvbjJbXSA9IHswLCAtMSwgMSwgMCwgMSwgLTEsIDEsIC0xfTsKICAgIGludCBob3JzZWQxW10gPSB7LTIsIC0yLCAtMSwgMSwgMiwgMiwgMSwgLTF9OwogICAgaW50IGhvcnNlZDJbXSA9IHsxLCAtMSwgLTIsIC0yLCAtMSwgMSwgMiwgMn07CgogICAgLy9UZW1wbGV0IGVuZAogICAgdm9pZCBpbnB1dCgpOwogICAgdm9pZCByZXNldCgpOwogICAgdm9pZCBCRlMoaW50IHUpOwoKICAgIHN0cnVjdCBkYXRhCiAgICB7CiAgICAgICAgaW50IHUsIGNvc3Q7CiAgICAgICAgZGF0YSgpIHt9CgogICAgICAgIGJvb2wgb3BlcmF0b3IgPCAoY29uc3QgZGF0YSYgcykgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBjb3N0IDwgcy5jb3N0OwogICAgICAgIH0KICAgIH07CgogICAgaW50IG5vZGUsIGVkZ2UsIHBhcmVudHNbIG1heG4gXSwgY2NbIG1heG4gXTsKICAgIHZlY3RvciA8dmlpPiBncmFwaDsKICAgIG1hcCA8c3RyaW5nLCBpbnQ+IG07CiAgICBjaGFyIHNbIDMyIF0sIGVbIDMyIF07CiAgICBib29sIG1hcmtbIG1heG4gXTsKCiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAgICAgaW5wdXQoKTsKCiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICB2b2lkIGlucHV0KCkKICAgIHsKICAgICAgICBpbnQgaSwgaiwgaywgc3JjLCBlbmQsIGNzdCwgcmVzLCBrYWcgPSAwOwogICAgICAgIHdoaWxlKH5zZigiJWQgJWQiLCAmbm9kZSwgJmVkZ2UpKQogICAgICAgIHsKICAgICAgICAgICAgaWYoIW5vZGUgJiYgIWVkZ2UpIGJyZWFrOwogICAgICAgICAgICBrID0gMTsKICAgICAgICAgICAgcmVzZXQoKTsKICAgICAgICAgICAgLy8gZ2V0IGlucHV0CiAgICAgICAgICAgIGZvKGksIGVkZ2UpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG1lbShzLCAwKTsgbWVtKGUsIDApOwogICAgICAgICAgICAgICAgc2YoIiVzICVzICVkIiwgcywgZSwgJmNzdCk7CiAgICAgICAgICAgICAgICBpZighbVsgcyBdKSBtWyBzIF0gPSBrKys7CiAgICAgICAgICAgICAgICBpZighbVsgZSBdKSBtWyBlIF0gPSBrKys7CiAgICAgICAgICAgICAgICBncmFwaFsgbVsgcyBdIF0ucGIoIHBpaShtWyBlIF0sIGNzdCkgKTsKICAgICAgICAgICAgICAgIGdyYXBoWyBtWyBlIF0gXS5wYiggcGlpKG1bIHMgXSwgY3N0KSApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG1lbShzLCAwKTsgbWVtKGUsIDApOwogICAgICAgICAgICBzZigiJXMgJXMiLCBzLCBlKTsKICAgICAgICAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgIGlmKG1bIHMgXSA9PSBtWyBlIF0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBmKCJTY2VuYXJpbyAjJWRcbjAgdG9uc1xuXG4iLCArK2thZyk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBCRlMoIG1bIHMgXSApOwogICAgICAgICAgICBpbnQgc3MgPSBtWyBlIF07CiAgICAgICAgICAgIC8vIGZpbmQgdGhlIHJlc3VsdAogICAgICAgICAgICByZXMgPSBjY1sgc3MgXTsKICAgICAgICAgICAgd2hpbGUodHJ1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3MgPSBwYXJlbnRzWyBzcyBdOwogICAgICAgICAgICAgICAgaWYoc3MgPT0gbVsgcyBdKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmVzID0gbWluKHJlcywgY2NbIHNzIF0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICBwZigiU2NlbmFyaW8gIyVkXG4lZCB0b25zXG5cbiIsICsra2FnLCByZXMpOwogICAgICAgIH0KICAgIH0KICAgIHZvaWQgQkZTKGludCB1KQogICAgewogICAgICAgIGludCBpLCBqLCB0bXAsIHdhaXQ7CiAgICAgICAgcHJpb3JpdHlfcXVldWUgPGRhdGE+IFE7CiAgICAgICAgZGF0YSB4OwogICAgICAgIHgudSA9IHU7IHguY29zdCA9IDA7CiAgICAgICAgUS5wdXNoKCB4ICk7CiAgICAgICAgbWFya1sgdSBdID0gZmFsc2U7CiAgICAgICAgd2hpbGUoIVEuZW1wdHkoKSkKICAgICAgICB7CiAgICAgICAgICAgIHggPSBRLnRvcCgpOyBRLnBvcCgpOwogICAgICAgICAgICB1ID0geC51OwogICAgICAgICAgICB3YWl0ID0geC5jb3N0OwogICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBncmFwaFsgdSBdLnNpemUoKTsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwaWkgcHIgPSBncmFwaFsgdSBdWyBpIF07CiAgICAgICAgICAgICAgICBpZihtYXJrWyBwci5maXJzdCBdKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHBhcmVudHNbIHByLmZpcnN0IF0gPSB1OwogICAgICAgICAgICAgICAgICAgIGNjWyBwci5maXJzdCBdID0gcHIuc2Vjb25kOyAvLyBpIHVzZSBjY1tdIGZvciBzYXZlIHRoZSBwYXRocyBjb3N0CiAgICAgICAgICAgICAgICAgICAgbWFya1sgcHIuZmlyc3QgXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIHgudSA9IHByLmZpcnN0OyB4LmNvc3QgPSBwci5zZWNvbmQ7CiAgICAgICAgICAgICAgICAgICAgUS5wdXNoKCB4ICk7CiAgICAgICAgICAgICAgICAgICAgaWYocHIuZmlyc3QgPT0gbVsgZSBdKSAvLyB3aGVuIGkgZmluZCB0aGUgZW5kIHBvaW50IHRoZW4gc3RvcAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoIVEuZW1wdHkoKSkgUS5wb3AoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGdyYXBoWyB1IF0uc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHZvaWQgcmVzZXQoKQogICAgewogICAgICAgIG0uY2xlYXIoKTsKICAgICAgICBncmFwaC5hc3NpZ24obm9kZSsxLCB2aWkoKSk7CiAgICAgICAgaW50IGk7CiAgICAgICAgZm9yKGkgPSAxOyBpIDw9IG5vZGU7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIHBhcmVudHNbIGkgXSA9IC0xOwogICAgICAgICAgICBtYXJrWyBpIF0gPSB0cnVlOwogICAgICAgICAgICBjY1sgaSBdID0gLTE7CiAgICAgICAgfQogICAgICAgIG1hcmtbIDAgXSA9IHRydWU7CiAgICB9Cg==