#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> vll;
typedef vector<int> vi;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;
const ll oo = 1e18+7, maxN = 1e5+5;
#define x first
#define y second
vector<vector<pll>> adj;
void dijkstra(int s, vll & d, vll & p) {
int n = adj.size();
d.assign(n, oo);
p.assign(n, -1);
vector<bool> u(n, false);
d[s] = 0;
for (int i = 0; i < n; i++) {
int v = -1;
for (int j = 0; j < n; j++) {
if (!u[j] && (v == -1 || d[j] < d[v]))
v = j;
}
if (d[v] == oo)
break;
u[v] = true;
for (auto edge : adj[v]) {
int to = edge.first;
int len = edge.second;
if (d[v] + len < d[to]) {
d[to] = d[v] + len;
p[to] = v;
}
}
}
}
void solve() {
int n, m; cin >> n >> m;
int s, t; cin >> s >> t; s--, t--;
int u, v; cin >> u >> v; u--, v--;
adj.assign(n, {});
map<pll, ll> m_w;
while (m--) {
ll a, b, c; cin >> a >> b >> c;
adj[--a].push_back({--b, c});
adj[b].push_back({a, c});
m_w[{a,b}] = c;
m_w[{b,a}] = c;
}
vll d_s, p_s;
dijkstra(s, d_s, p_s);
vi route;
int curr = t;
do {
route.push_back(curr);
curr = p_s[curr];
} while (curr != -1);
vll d_u, p_u, d_v, p_v;
dijkstra(u, d_u, p_u);
dijkstra(v, d_v, p_v);
ll ans = d_u[v];
// cout << ans << '\n';
ll mn = oo, U, V;
for (auto &i: route)
if (mn > d_u[i]) {
mn = d_u[i];
U = i;
}
mn = oo;
for (auto &i: route)
if (mn > d_v[i]) {
mn = d_v[i];
V = i;
}
vi u_route, v_route;
curr = U;
do {
u_route.push_back(curr);
curr = p_u[curr];
} while (curr != -1);
curr = V;
do {
v_route.push_back(curr);
curr = p_v[curr];
} while (curr != -1);
vector<pii> edges;
for (int i=0; i<u_route.size()-1; i++)
edges.push_back({u_route[i], u_route[i+1]});
for (int i=0; i<v_route.size()-1; i++)
edges.push_back({v_route[i], v_route[i+1]});
// sort(edges.begin(), edges.end());
// edges.erase(unique(edges.begin(), edges.end()), edges.end());
ll ans2 = 0;
for (auto &i: edges) ans2 += m_w[i];
// for (auto &i: edges) cout << i.x+1 << '-' << i.y+1 << ' ';
// cout << '\n';
cout << min(ans, ans2);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t = 1;
// cin >> t;
while (t--) solve(), cout << '\n';
}