#include <bits/stdc++.h> // NeOWami
using namespace std;
#define ft first
#define sc second
#define int long long
using pii = pair<int, int>;
template<class T> using heapmin = priority_queue<T, vector<T>, greater<T>>;
const int N = 2e5 + 5;
const int inf = 1e18;
int n, m;
int S, T, U, V;
struct Edge {
int u, v, w;
} E[N];
vector<pii> G[N];
bool ckmin(int &u, int v) {
if (u > v) return u = v, 1;
return 0;
}
int distS[N], distT[N], distV[N], distU[N];
int candE[N];
void calc(int root, int dist[]) {
heapmin<pii> Q;
for (int i = 1; i <= n; i++) dist[i] = inf;
dist[root] = 0;
Q.push({0, root});
while(!Q.empty()) {
int u = Q.top().sc, old = Q.top().ft;
Q.pop();
if (old != dist[u]) continue;
for (pii item: G[u]) {
int v = item.ft, w = item.sc;
if (ckmin(dist[v], w + dist[u])) {
Q.push({dist[v], v});
}
}
}
}
vector<int> tour;
bool vis[N];
vector<int> g[N];
int dp[N];
inline void dfsGettour(int u) {
vis[u] = 1;
for (int v: g[u]) {
if (!vis[v]) {
dfsGettour(v);
}
}
tour.push_back(u);
}
int getMinU() {
for (int i = 1; i <= n; i++) g[i].clear();
for (int i = 1; i <= m; i++) {
int u = E[i].u, v = E[i].v, w = E[i].w;
if (candE[i] == 1) {
g[u].push_back(v);
}
if (candE[i] == 2) {
g[v].push_back(u);
}
}
tour.clear();
for (int i = 1; i <= n; i++) vis[i] = 0;
dfsGettour(S);
int mmin = inf;
// cerr << "?";
for (int i = 1; i <= n; i++) dp[i] = inf;
for (int x: tour) {
dp[x] = distV[x];
for (int k: g[x]) {
dp[x] = min(dp[x], dp[k]);
}
mmin = min(mmin, dp[x] + distU[x]);
}
return mmin;
}
signed main() {
cin.tie(NULL)->sync_with_stdio(false);
if(ifstream("PATH.inp")) {
freopen("PATH.inp", "r", stdin);
freopen("PATH.out", "w", stdout);
}
cin >> n >> m >> S >> T >> U >> V;
for (int i = 1; i <= m; i++) {
int u, v, w; cin >> u >> v >> w;
E[i] = {u, v, w};
G[u].push_back({v, w});
G[v].push_back({u, w});
}
calc(S, distS);
calc(T, distT);
calc(U, distU);
calc(V, distV);
fill(candE + 1, candE + m + 1, 0);
int ans = distV[U];
for (int i = 1; i <= m; i++) {
int u = E[i].u, v = E[i].v, w = E[i].w;
if (distS[u] + w + distT[v] == distS[T]) candE[i] = 1;
if (distS[v] + w + distT[u] == distS[T]) candE[i] = 2;
}
ans = min(ans, getMinU());
swap(U, V);
swap(distU, distV);
ans = min(ans, getMinU());
cout << ans;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IC8vIE5lT1dhbWkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZnQgZmlyc3QKI2RlZmluZSBzYyBzZWNvbmQKI2RlZmluZSBpbnQgbG9uZyBsb25nCnVzaW5nIHBpaSA9IHBhaXI8aW50LCBpbnQ+Owp0ZW1wbGF0ZTxjbGFzcyBUPiB1c2luZyBoZWFwbWluID0gcHJpb3JpdHlfcXVldWU8VCwgdmVjdG9yPFQ+LCBncmVhdGVyPFQ+PjsKCmNvbnN0IGludCBOID0gMmU1ICsgNTsKY29uc3QgaW50IGluZiA9IDFlMTg7CmludCBuLCBtOwppbnQgUywgVCwgVSwgVjsKCnN0cnVjdCBFZGdlIHsKICAgIGludCB1LCB2LCB3Owp9IEVbTl07CnZlY3RvcjxwaWk+IEdbTl07Cgpib29sIGNrbWluKGludCAmdSwgaW50IHYpIHsKICAgIGlmICh1ID4gdikgcmV0dXJuIHUgPSB2LCAxOwogICAgcmV0dXJuIDA7Cn0KCmludCBkaXN0U1tOXSwgZGlzdFRbTl0sIGRpc3RWW05dLCBkaXN0VVtOXTsKaW50IGNhbmRFW05dOwoKdm9pZCBjYWxjKGludCByb290LCBpbnQgZGlzdFtdKSB7CiAgICBoZWFwbWluPHBpaT4gUTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgZGlzdFtpXSA9IGluZjsKICAgIGRpc3Rbcm9vdF0gPSAwOwogICAgUS5wdXNoKHswLCByb290fSk7CiAgICB3aGlsZSghUS5lbXB0eSgpKSB7CiAgICAgICAgaW50IHUgPSBRLnRvcCgpLnNjLCBvbGQgPSBRLnRvcCgpLmZ0OwogICAgICAgIFEucG9wKCk7CiAgICAgICAgaWYgKG9sZCAhPSBkaXN0W3VdKSBjb250aW51ZTsKICAgICAgICBmb3IgKHBpaSBpdGVtOiBHW3VdKSB7CiAgICAgICAgICAgIGludCB2ID0gaXRlbS5mdCwgdyA9IGl0ZW0uc2M7CiAgICAgICAgICAgIGlmIChja21pbihkaXN0W3ZdLCB3ICsgZGlzdFt1XSkpIHsKICAgICAgICAgICAgICAgIFEucHVzaCh7ZGlzdFt2XSwgdn0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CnZlY3RvcjxpbnQ+IHRvdXI7CmJvb2wgdmlzW05dOwp2ZWN0b3I8aW50PiBnW05dOwppbnQgZHBbTl07CgppbmxpbmUgdm9pZCBkZnNHZXR0b3VyKGludCB1KSB7CiAgICB2aXNbdV0gPSAxOwogICAgZm9yIChpbnQgdjogZ1t1XSkgewogICAgICAgIGlmICghdmlzW3ZdKSB7CiAgICAgICAgICAgIGRmc0dldHRvdXIodik7CiAgICAgICAgfQogICAgfQogICAgdG91ci5wdXNoX2JhY2sodSk7Cn0KaW50IGdldE1pblUoKSB7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGdbaV0uY2xlYXIoKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG07IGkrKykgewogICAgICAgIGludCB1ID0gRVtpXS51LCB2ID0gRVtpXS52LCB3ID0gRVtpXS53OwoKICAgICAgICBpZiAoY2FuZEVbaV0gPT0gMSkgewogICAgICAgICAgICBnW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICB9CiAgICAgICAgaWYgKGNhbmRFW2ldID09IDIpIHsKICAgICAgICAgICAgZ1t2XS5wdXNoX2JhY2sodSk7CiAgICAgICAgfQogICAgfQogICAgdG91ci5jbGVhcigpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB2aXNbaV0gPSAwOwogICAgZGZzR2V0dG91cihTKTsKICAgIGludCBtbWluID0gaW5mOwogICAgLy8gY2VyciA8PCAiPyI7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGRwW2ldID0gaW5mOwogICAgZm9yIChpbnQgeDogdG91cikgewogICAgICAgIGRwW3hdID0gZGlzdFZbeF07CiAgICAgICAgZm9yIChpbnQgazogZ1t4XSkgewogICAgICAgICAgICBkcFt4XSA9IG1pbihkcFt4XSwgZHBba10pOwogICAgICAgIH0KICAgICAgICBtbWluID0gbWluKG1taW4sIGRwW3hdICsgZGlzdFVbeF0pOwogICAgfQogICAgcmV0dXJuIG1taW47Cn0Kc2lnbmVkIG1haW4oKSB7CiAgICBjaW4udGllKE5VTEwpLT5zeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgaWYoaWZzdHJlYW0oIlBBVEguaW5wIikpIHsKICAgICAgICBmcmVvcGVuKCJQQVRILmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oIlBBVEgub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQogICAgY2luID4+IG4gPj4gbSA+PiBTID4+IFQgPj4gVSA+PiBWOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgaW50IHUsIHYsIHc7IGNpbiA+PiB1ID4+IHYgPj4gdzsKICAgICAgICBFW2ldID0ge3UsIHYsIHd9OwogICAgICAgIEdbdV0ucHVzaF9iYWNrKHt2LCB3fSk7CiAgICAgICAgR1t2XS5wdXNoX2JhY2soe3UsIHd9KTsKICAgIH0KICAgIGNhbGMoUywgZGlzdFMpOwogICAgY2FsYyhULCBkaXN0VCk7CiAgICBjYWxjKFUsIGRpc3RVKTsKICAgIGNhbGMoViwgZGlzdFYpOwogICAgZmlsbChjYW5kRSArIDEsIGNhbmRFICsgbSArIDEsIDApOwogICAgaW50IGFucyA9IGRpc3RWW1VdOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgaW50IHUgPSBFW2ldLnUsIHYgPSBFW2ldLnYsIHcgPSBFW2ldLnc7CiAgICAgICAgaWYgKGRpc3RTW3VdICsgdyArIGRpc3RUW3ZdID09IGRpc3RTW1RdKSBjYW5kRVtpXSA9IDE7CiAgICAgICAgaWYgKGRpc3RTW3ZdICsgdyArIGRpc3RUW3VdID09IGRpc3RTW1RdKSBjYW5kRVtpXSA9IDI7CiAgICB9CiAgICBhbnMgPSBtaW4oYW5zLCBnZXRNaW5VKCkpOwogICAgc3dhcChVLCBWKTsKICAgIHN3YXAoZGlzdFUsIGRpc3RWKTsKICAgIGFucyA9IG1pbihhbnMsIGdldE1pblUoKSk7CiAgICBjb3V0IDw8IGFuczsKICAgIHJldHVybiAwOwp9Cg==