// TranThienPhuc2657
// 2 ngay truoc khi toi ki thi Hoc sinh gioi quoc gia 2025 - 2026, 25/12/2025.
#include <bits/stdc++.h>
using namespace std;
#define file "TASK"
#define TIME 1.0 * clock() / CLOCKS_PER_SEC
#define ll long long
#define pb push_back
#define fi first
#define se second
#define pii pair <int, int>
#define pll pair <ll, ll>
#define Sz(x) ((int) (x).size())
#define getBit(mask, i) (((mask) >> (i)) & 1)
template <typename T1, typename T2> bool mini(T1 &A, T2 B) {if (A > B) A = B; else return 0; return 1;}
template <typename T1, typename T2> bool maxi(T1 &A, T2 B) {if (A < B) A = B; else return 0; return 1;}
const int inf = 2e9 + 7;
const ll linf = 1e18l + 7;
const int mod = 1e9 + 7;
const int N = 1e5 + 5;
int n, m, A, B, C, D;
struct Edge {
int u, v, w;
int other(int x) {
return u ^ v ^ x;
}
};
vector <Edge> edges;
vector <int> adj[N];
ll dA[N], dB[N];
ll d[4][N];
struct Dijkstra_state {
int ty, u;
ll du;
bool operator < (const Dijkstra_state &ot) const {
return du > ot.du;
}
};
ll res = linf;
// inp
void inp() {
cin >> n >> m;
cin >> A >> B >> C >> D;
edges.pb({0, 0, 0});
for (int i = 1; i <= m; i++) {
int u, v, w; cin >> u >> v >> w;
edges.pb({u, v, w});
adj[u].pb(i);
adj[v].pb(i);
}
}
// init
void init() {
}
// proc
bool inSP(int u, int v, int w) {
return ((dA[u] + w) == dA[v] and (dA[u] + dB[v] + w) == dA[B]);
}
void dijkstra(int s, ll d[]) {
for (int u = 1; u <= n; u++) d[u] = linf;
priority_queue <pll, vector <pll>, greater <pll>> pq;
d[s] = 0; pq.push({d[s], s});
while (!pq.empty()) {
int u = pq.top().se; ll du = pq.top().fi; pq.pop();
if (du > d[u]) continue;
for (int idE: adj[u]) {
int v = edges[idE].other(u), w = edges[idE].w;
if (mini(d[v], d[u] + w)) pq.push({d[v], v});
}
}
}
void dijkstra2(int s) {
for (int u = 1; u <= n; u++) d[0][u] = d[1][u] = d[2][u] = linf;
priority_queue <Dijkstra_state> pq;
d[0][s] = 0; pq.push({0, s, d[0][s]});
while (!pq.empty()) {
int ty = pq.top().ty, u = pq.top().u; ll du = pq.top().du; pq.pop();
if (du > d[ty][u]) continue;
for (int idE: adj[u]) {
int v = edges[idE].other(u), w = edges[idE].w;
if (ty == 0) {
if (mini(d[0][v], d[0][u] + w)) pq.push({0, v, d[0][v]});
if (inSP(u, v, w) and mini(d[1][v], d[0][u])) pq.push({1, v, d[1][v]});
}
else if (ty == 1) {
if (inSP(u, v, w) and mini(d[1][v], d[1][u])) pq.push({1, v, d[1][v]});
if (mini(d[2][v], d[1][u] + w)) pq.push({2, v, d[2][v]});
}
else {
if (mini(d[2][v], d[2][u] + w)) pq.push({2, v, d[2][v]});
}
}
}
}
void proc() {
dijkstra(A, dA);
dijkstra(B, dB);
dijkstra2(C);
mini(res, min({d[0][D], d[1][D], d[2][D]}));
dijkstra2(D);
mini(res, min({d[0][C], d[1][C], d[2][C]}));
cout << res;
}
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen(file".inp", "r")) {
freopen(file".inp", "r", stdin);
freopen(file".out", "w", stdout);
}
inp();
init();
proc();
cerr << "Time elapsed: " << TIME << "s.\n";
return 0;
}
Ly8gVHJhblRoaWVuUGh1YzI2NTcKLy8gMiBuZ2F5IHRydW9jIGtoaSB0b2kga2kgdGhpIEhvYyBzaW5oIGdpb2kgcXVvYyBnaWEgMjAyNSAtIDIwMjYsIDI1LzEyLzIwMjUuCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIGZpbGUgIlRBU0siCiNkZWZpbmUgVElNRSAxLjAgKiBjbG9jaygpIC8gQ0xPQ0tTX1BFUl9TRUMKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIHBpaSBwYWlyIDxpbnQsIGludD4KI2RlZmluZSBwbGwgcGFpciA8bGwsIGxsPgojZGVmaW5lIFN6KHgpICgoaW50KSAoeCkuc2l6ZSgpKQojZGVmaW5lIGdldEJpdChtYXNrLCBpKSAoKChtYXNrKSA+PiAoaSkpICYgMSkKdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4gYm9vbCBtaW5pKFQxICZBLCBUMiBCKSB7aWYgKEEgPiBCKSBBID0gQjsgZWxzZSByZXR1cm4gMDsgcmV0dXJuIDE7fQp0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPiBib29sIG1heGkoVDEgJkEsIFQyIEIpIHtpZiAoQSA8IEIpIEEgPSBCOyBlbHNlIHJldHVybiAwOyByZXR1cm4gMTt9CmNvbnN0IGludCBpbmYgPSAyZTkgKyA3Owpjb25zdCBsbCBsaW5mID0gMWUxOGwgKyA3Owpjb25zdCBpbnQgbW9kID0gMWU5ICsgNzsKY29uc3QgaW50IE4gPSAxZTUgKyA1OwoKaW50IG4sIG0sIEEsIEIsIEMsIEQ7CnN0cnVjdCBFZGdlIHsKICAgIGludCB1LCB2LCB3OwoKICAgIGludCBvdGhlcihpbnQgeCkgewogICAgICAgIHJldHVybiB1IF4gdiBeIHg7CiAgICB9Cn07CnZlY3RvciA8RWRnZT4gZWRnZXM7CnZlY3RvciA8aW50PiBhZGpbTl07CmxsIGRBW05dLCBkQltOXTsKbGwgZFs0XVtOXTsKCnN0cnVjdCBEaWprc3RyYV9zdGF0ZSB7CiAgICBpbnQgdHksIHU7CiAgICBsbCBkdTsKCiAgICBib29sIG9wZXJhdG9yIDwgKGNvbnN0IERpamtzdHJhX3N0YXRlICZvdCkgY29uc3QgewogICAgICAgIHJldHVybiBkdSA+IG90LmR1OwogICAgfQp9OwoKbGwgcmVzID0gbGluZjsKCi8vIGlucAp2b2lkIGlucCgpIHsKICAgIGNpbiA+PiBuID4+IG07CiAgICBjaW4gPj4gQSA+PiBCID4+IEMgPj4gRDsKCiAgICBlZGdlcy5wYih7MCwgMCwgMH0pOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgaW50IHUsIHYsIHc7IGNpbiA+PiB1ID4+IHYgPj4gdzsKICAgICAgICBlZGdlcy5wYih7dSwgdiwgd30pOwogICAgICAgIGFkalt1XS5wYihpKTsKICAgICAgICBhZGpbdl0ucGIoaSk7CiAgICB9Cn0KCi8vIGluaXQKdm9pZCBpbml0KCkgewoKfQoKLy8gcHJvYwpib29sIGluU1AoaW50IHUsIGludCB2LCBpbnQgdykgewogICAgcmV0dXJuICgoZEFbdV0gKyB3KSA9PSBkQVt2XSBhbmQgKGRBW3VdICsgZEJbdl0gKyB3KSA9PSBkQVtCXSk7Cn0KCnZvaWQgZGlqa3N0cmEoaW50IHMsIGxsIGRbXSkgewogICAgZm9yIChpbnQgdSA9IDE7IHUgPD0gbjsgdSsrKSBkW3VdID0gbGluZjsKICAgIHByaW9yaXR5X3F1ZXVlIDxwbGwsIHZlY3RvciA8cGxsPiwgZ3JlYXRlciA8cGxsPj4gcHE7CiAgICBkW3NdID0gMDsgcHEucHVzaCh7ZFtzXSwgc30pOwoKICAgIHdoaWxlICghcHEuZW1wdHkoKSkgewogICAgICAgIGludCB1ID0gcHEudG9wKCkuc2U7IGxsIGR1ID0gcHEudG9wKCkuZmk7IHBxLnBvcCgpOwogICAgICAgIGlmIChkdSA+IGRbdV0pIGNvbnRpbnVlOwogICAgICAgIGZvciAoaW50IGlkRTogYWRqW3VdKSB7CiAgICAgICAgICAgIGludCB2ID0gZWRnZXNbaWRFXS5vdGhlcih1KSwgdyA9IGVkZ2VzW2lkRV0udzsKICAgICAgICAgICAgaWYgKG1pbmkoZFt2XSwgZFt1XSArIHcpKSBwcS5wdXNoKHtkW3ZdLCB2fSk7CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIGRpamtzdHJhMihpbnQgcykgewogICAgZm9yIChpbnQgdSA9IDE7IHUgPD0gbjsgdSsrKSBkWzBdW3VdID0gZFsxXVt1XSA9IGRbMl1bdV0gPSBsaW5mOwogICAgcHJpb3JpdHlfcXVldWUgPERpamtzdHJhX3N0YXRlPiBwcTsKICAgIGRbMF1bc10gPSAwOyBwcS5wdXNoKHswLCBzLCBkWzBdW3NdfSk7CgogICAgd2hpbGUgKCFwcS5lbXB0eSgpKSB7CiAgICAgICAgaW50IHR5ID0gcHEudG9wKCkudHksIHUgPSBwcS50b3AoKS51OyBsbCBkdSA9IHBxLnRvcCgpLmR1OyBwcS5wb3AoKTsKICAgICAgICBpZiAoZHUgPiBkW3R5XVt1XSkgY29udGludWU7CiAgICAgICAgZm9yIChpbnQgaWRFOiBhZGpbdV0pIHsKICAgICAgICAgICAgaW50IHYgPSBlZGdlc1tpZEVdLm90aGVyKHUpLCB3ID0gZWRnZXNbaWRFXS53OwoKICAgICAgICAgICAgaWYgKHR5ID09IDApIHsKICAgICAgICAgICAgICAgIGlmIChtaW5pKGRbMF1bdl0sIGRbMF1bdV0gKyB3KSkgcHEucHVzaCh7MCwgdiwgZFswXVt2XX0pOwogICAgICAgICAgICAgICAgaWYgKGluU1AodSwgdiwgdykgYW5kIG1pbmkoZFsxXVt2XSwgZFswXVt1XSkpIHBxLnB1c2goezEsIHYsIGRbMV1bdl19KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICh0eSA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoaW5TUCh1LCB2LCB3KSBhbmQgbWluaShkWzFdW3ZdLCBkWzFdW3VdKSkgcHEucHVzaCh7MSwgdiwgZFsxXVt2XX0pOwogICAgICAgICAgICAgICAgaWYgKG1pbmkoZFsyXVt2XSwgZFsxXVt1XSArIHcpKSBwcS5wdXNoKHsyLCB2LCBkWzJdW3ZdfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAobWluaShkWzJdW3ZdLCBkWzJdW3VdICsgdykpIHBxLnB1c2goezIsIHYsIGRbMl1bdl19KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKdm9pZCBwcm9jKCkgewogICAgZGlqa3N0cmEoQSwgZEEpOwogICAgZGlqa3N0cmEoQiwgZEIpOwoKICAgIGRpamtzdHJhMihDKTsKICAgIG1pbmkocmVzLCBtaW4oe2RbMF1bRF0sIGRbMV1bRF0sIGRbMl1bRF19KSk7CgogICAgZGlqa3N0cmEyKEQpOwogICAgbWluaShyZXMsIG1pbih7ZFswXVtDXSwgZFsxXVtDXSwgZFsyXVtDXX0pKTsKCiAgICBjb3V0IDw8IHJlczsKfQoKc2lnbmVkIG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGlmIChmb3BlbihmaWxlIi5pbnAiLCAiciIpKSB7CiAgICAgICAgZnJlb3BlbihmaWxlIi5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKGZpbGUiLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBpbnAoKTsKICAgIGluaXQoKTsKICAgIHByb2MoKTsKICAgIGNlcnIgPDwgIlRpbWUgZWxhcHNlZDogIiA8PCBUSU1FIDw8ICJzLlxuIjsKICAgIHJldHVybiAwOwp9Cg==