#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define NEGGERS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
const ll N=1e5+31,INF=1e18;
vector<pair<ll,ll>> g[N],ez[N];
ll ez2[N],ez1[N],ez3[N];
void dijk(ll s,ll d[],ll n,vector<pair<ll,ll>> gr[]){
for(ll i=1;i<=n;i++) d[i]=INF;
priority_queue<pair<ll,ll>,vector<pair<ll,ll>>,greater<pair<ll,ll>>> pq;
pq.push({0,s});
d[s]=0;
while(!pq.empty()){
ll v=pq.top().second;
ll c=pq.top().first;
pq.pop();
if(c!=d[v]) continue;
for(auto e:gr[v]){
ll to=e.first,w=e.second;
if(d[to]>c+w){
d[to]=c+w;
pq.push({d[to],to});
}
}
}
}
void solve(){
ll n,m,s,t,a,b;
cin>>n>>m>>s>>t>>a>>b;
vector<ll>x(m),y(m),w(m);
for(ll i=0;i<m;i++){
cin>>x[i]>>y[i]>>w[i];
g[x[i]].push_back({y[i],w[i]});
g[y[i]].push_back({x[i],w[i]});
}
dijk(s,ez2,n,g);
dijk(t,ez1,n,g);
ll best=ez2[t];
for(ll i=0;i<m;i++){
ll u=x[i],v=y[i],c=w[i];
if(ez2[u]+c+ez1[v]==best or ez2[v]+c+ez1[u]==best){
ez[u].push_back({v,0});
ez[v].push_back({u,0});
}
else{
ez[u].push_back({v,c});
ez[v].push_back({u,c});
}
}
dijk(a,ez3,n,ez);
cout<<ez3[b];
}
signed main(){
NEGGERS
ll tt=1;
//cin>>tt;
while(tt--){
solve();
}
}