#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
int N, E;
vector<vector<pair<int, int>>> adj;
int dijkstra(int start, int end) {
priority_queue<pair<int, int>> pq; // -거리, 정점
vector<int> dist(N + 1, 987654321);
pq.push({0, start});
dist[start] = 0;
while(!pq.empty()) {
int dst = -pq.top().first;
int vertex = pq.top().second;
pq.pop();
if(vertex == end)
break;
if(dist[vertex] < dst)
continue;
for(auto& iter : adj[vertex]) {
int nextDst = iter.second + dst;
int nextVertex = iter.first;
if(dist[nextVertex] > nextDst) {
dist[nextVertex] = nextDst;
pq.push({-nextDst, nextVertex});
}
}
}
return dist[end];
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> N >> E;
adj.resize(N + 1);
for(int i = 0; i != E; ++i) {
int a, b, c;
cin >> a >> b>> c;
adj[a].push_back({b, c});
adj[b].push_back({a, c});
}
int viaPointA, viaPointB;
cin >> viaPointA >> viaPointB;
long long retA = (long long)dijkstra(1, viaPointA) + dijkstra(viaPointA, viaPointB) + dijkstra(viaPointB, N);
long long retB = (long long)dijkstra(1, viaPointB) + dijkstra(viaPointB, viaPointA) + dijkstra(viaPointA, N);
if(retA > 987654321 && retB > 987654321)
cout << -1;
else
cout << min(retA, retB);
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8cXVldWU+CiNpbmNsdWRlPGFsZ29yaXRobT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBOLCBFOwp2ZWN0b3I8dmVjdG9yPHBhaXI8aW50LCBpbnQ+Pj4gYWRqOwoKaW50IGRpamtzdHJhKGludCBzdGFydCwgaW50IGVuZCkgewoJcHJpb3JpdHlfcXVldWU8cGFpcjxpbnQsIGludD4+IHBxOyAvLyAt6rGw66asLCDsoJXsoJAKCXZlY3RvcjxpbnQ+IGRpc3QoTiArIDEsIDk4NzY1NDMyMSk7CglwcS5wdXNoKHswLCBzdGFydH0pOwoJZGlzdFtzdGFydF0gPSAwOwoJd2hpbGUoIXBxLmVtcHR5KCkpIHsKCQlpbnQgZHN0ID0gLXBxLnRvcCgpLmZpcnN0OwoJCWludCB2ZXJ0ZXggPSBwcS50b3AoKS5zZWNvbmQ7CgkJcHEucG9wKCk7CgkJaWYodmVydGV4ID09IGVuZCkKCQkJYnJlYWs7CgkJaWYoZGlzdFt2ZXJ0ZXhdIDwgZHN0KQoJCQljb250aW51ZTsKCQlmb3IoYXV0byYgaXRlciA6IGFkalt2ZXJ0ZXhdKSB7CgkJCWludCBuZXh0RHN0ID0gaXRlci5zZWNvbmQgKyBkc3Q7CgkJCWludCBuZXh0VmVydGV4ID0gaXRlci5maXJzdDsKCQkJaWYoZGlzdFtuZXh0VmVydGV4XSA+IG5leHREc3QpIHsKCQkJCWRpc3RbbmV4dFZlcnRleF0gPSBuZXh0RHN0OwoJCQkJcHEucHVzaCh7LW5leHREc3QsIG5leHRWZXJ0ZXh9KTsKCQkJfQoJCX0KCX0KCXJldHVybiBkaXN0W2VuZF07Cn0KCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwoJY2luLnRpZSgwKTsKCWNpbiA+PiBOID4+IEU7CglhZGoucmVzaXplKE4gKyAxKTsKCWZvcihpbnQgaSA9IDA7IGkgIT0gRTsgKytpKSB7CgkJaW50IGEsIGIsIGM7CgkJY2luID4+IGEgPj4gYj4+IGM7CgkJYWRqW2FdLnB1c2hfYmFjayh7YiwgY30pOwoJCWFkaltiXS5wdXNoX2JhY2soe2EsIGN9KTsKCX0KCWludCB2aWFQb2ludEEsIHZpYVBvaW50QjsKCWNpbiA+PiB2aWFQb2ludEEgPj4gdmlhUG9pbnRCOwoJbG9uZyBsb25nIHJldEEgPSAobG9uZyBsb25nKWRpamtzdHJhKDEsIHZpYVBvaW50QSkgKyBkaWprc3RyYSh2aWFQb2ludEEsIHZpYVBvaW50QikgKyBkaWprc3RyYSh2aWFQb2ludEIsIE4pOwoJbG9uZyBsb25nIHJldEIgPSAobG9uZyBsb25nKWRpamtzdHJhKDEsIHZpYVBvaW50QikgKyBkaWprc3RyYSh2aWFQb2ludEIsIHZpYVBvaW50QSkgKyBkaWprc3RyYSh2aWFQb2ludEEsIE4pOwoJaWYocmV0QSA+IDk4NzY1NDMyMSAmJiByZXRCID4gOTg3NjU0MzIxKQoJCWNvdXQgPDwgLTE7CgllbHNlCgkJY291dCA8PCBtaW4ocmV0QSwgcmV0Qik7Cn0=