#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
int mp[maxn][maxn], pre[maxn][maxn];
int n, m;
void init()
{
memset(mp, 0x3f, sizeof mp);
for(int i = 1; i <= n; ++i) mp[i][i] = 0;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
pre[i][j] = i;
}
void Folyd()
{
for(int k = 1; k <= n; ++k)
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
{
if(mp[i][j] > mp[i][k]+mp[k][j])
{
mp[i][j] = mp[i][k]+mp[k][j];
pre[i][j] = pre[k][j];
}
}
}
void PrintPath(int start, int end)
{
int k = end;
while(k != start)
{
printf("%c", k+96);
k = pre[start][k];
}
printf("%c\n", k+96);
}
int main()
{
char uu, vv;int w;
cin >> n >> m; init();
char ss[100];getchar();
gets(ss);
for(int i = 1; i <= m; ++i)
{
cin >> uu >> vv >> w;
int u=uu-96;int v=vv-96;
mp[u][v] = mp[v][u] = w;
}
Folyd();
char sss,ee;
cin>>sss>>ee;
int s=sss-96;
int e=ee-96;
// cout<<mp[s][e]<<endl;
PrintPath(e, s);
return 0;
}
路径输出是倒序的,所以将起点和终点交换一下带入PrintPath()即可