#include <bits/stdc++.h>
using namespace std;
using ld = long double;
using ll = long long;
const ll INF = 3e18, MOD = 1e9 + 7;
void solve();
signed main() {
#ifdef LOCAL
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(0);
int q = 1;
while (q--) {
solve();
}
}
vector<vector<pair<ll, ll>>> g;
ll n;
ll dist(ll s, ll t) {
vector<ll> ds(n, INF);
ds[s] = 0;
set<pair<ll, ll>> dj;
dj.insert({0, s});
while (!dj.empty()) {
ll v = dj.begin()->second;
dj.erase(dj.begin());
for (auto [u, c] : g[v]) {
if (ds[u] > ds[v] + c) {
dj.erase({ds[u], u});
ds[u] = ds[v] + c;
dj.insert({ds[u], u});
}
}
}
return ds[t];
}
void solve() {
ll m; cin >> n >> m;
ll s, t; cin >> s >> t; s--, t--;
ll u, v; cin >> u >> v; u--, v--;
g.resize(n);
for (int i = 0; i < m; i++) {
ll a, b, c; cin >> a >> b >> c;
a--, b--;
g[a].emplace_back(b, c);
g[b].emplace_back(a, c);
}
ll len = dist(s, t);
ll ans = dist(u, v);
for (int f1 = 0; f1 < n; f1++) {
for (int f2 = 0; f2 < n; f2++) {
if (dist(s, f1) + dist(f1, f2) + dist(f2, t) == len) {
ans = min(dist(u, f1) + dist(f2, v), ans);
ans = min(dist(v, f1) + dist(f2, u), ans);
}
}
}
cout << ans;
}