#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <iostream>
#include <string>
#include <map>
using namespace std;
#define LL long long
#define MP(a, b) make_pair(a, b)
const int MAXN = 200 + 5;
const int INF = 0x3f3f3f3f;
typedef pair<int, int> pii;
priority_queue<pii, vector<pii>, greater<pii> >qu;
int mp[MAXN][MAXN], k;
map<string, int> dic;
int n, d[MAXN];
void Dijkstra(int start)
{
memset(d, 0x3f, sizeof d);
d[start] = 0;
qu.push(MP(d[start], start));
while (!qu.empty())
{
pii u = qu.top();
qu.pop();
int x = u.second;
if (d[x] != u.first)
continue;
for (int i = 0; i < n; i++)
{
if (d[i] > d[x] + mp[x][i])
{
d[i] = d[x] + mp[x][i];
qu.push(MP(d[i], i));
}
}
}
}
int main()
{
//freopen("input.txt", "r", stdin);
int nr, i, j, a, b, w, st, ed;
while (~scanf("%d%d", &n, &nr))
{
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
mp[i][j] = (i == j ? 0 : INF);
for (i = 0; i < nr; i++)
{
scanf("%d%d%d", &a, &b, &w);
mp[a][b] = mp[b][a] = min(w, mp[a][b]);
}
scanf("%d%d", &st, &ed);
Dijkstra(st);
printf("%d\n", d[ed] == INF ? -1 : d[ed]);
}
return 0;
}