#include <bits/stdc++.h>
#define ll long long
#define ii pair<ll,ll>
#define iiii pair<ll,pair<ll,pair<ll,ll>>>
#define fi first
#define se second
using namespace std;
const int N=1e5+6;
const ll inf=1e18;
vector<ii>v1[N];
vector<iiii>v2;
int a2[N];
ll n,m,s,t,u,v;
vector<ii>v3[N];
ll dp[N],dp1[N];
void dick(int s){
for(int i=1;i<=n;i++){
dp[i]=inf;
}
dp[s]=0;
priority_queue<ii,vector<ii>,greater<ii>>q;
q.push({dp[s],s});
while(!q.empty()){
ll s1=q.top().fi;
int node=q.top().se;
q.pop();
if(s1>dp[node]) continue;
for(auto x:v1[node]){
int node1=x.fi;
ll s2=x.se;
if(dp[node1]>dp[node]+s2){
dp[node1]=dp[node]+s2;
q.push({dp[node1],node1});
}
}
}
}
void dick1(int s){
for(int i=1;i<=n;i++){
dp1[i]=inf;
}
dp1[s]=0;
priority_queue<ii,vector<ii>,greater<ii>>q;
q.push({dp1[s],s});
while(!q.empty()){
ll s1=q.top().fi;
int node=q.top().se;
q.pop();
if(s1>dp1[node]) continue;
for(auto x:v1[node]){
int node1=x.fi;
ll s2=x.se;
if(dp1[node1]>dp1[node]+s2){
dp1[node1]=dp1[node]+s2;
q.push({dp1[node1],node1});
}
}
}
}
void dick2(int s){
for(int i=1;i<=n;i++){
dp[i]=inf;
}
dp[s]=0;
priority_queue<ii,vector<ii>,greater<ii>>q;
q.push({dp[s],s});
while(!q.empty()){
ll s1=q.top().fi;
int node=q.top().se;
q.pop();
if(s1>dp[node]) continue;
for(auto x:v3[node]){
int node1=x.fi;
ll s2=x.se;
if(dp[node1]>dp[node]+s2){
dp[node1]=dp[node]+s2;
q.push({dp[node1],node1});
}
}
}
}
//void dick3(int s){
// for(int i=1;i<=n;i++){
// dp1[i]=inf;
// }
// dp1[s]=0;
// priority_queue<ii,vector<ii>,greater<ii>>q;
// q.push({dp1[s],s});
// while(!q.empty()){
// ll s1=q.top().fi;
// int node=q.top().se;
// q.pop();
// if(s1>dp1[node]) continue;
// for(auto x:v3[node]){
// int node1=x.fi;
// ll s2=x.se;
// if(dp1[node1]>dp1[node]+s2){
// dp1[node1]=dp1[node]+s2;
// q.push({dp1[node1],node1});
// }
// }
// }
//}
int main()
{
cin >>n >>m >>s >>t >>u >>v;
for(int i=1;i<=m;i++){
int x,y,w;
cin >>x >>y >>w;
v2.push_back({x,{y,{w,i}}});
v1[x].push_back({y,w});
v1[y].push_back({x,w});
}
dick(s);
dick1(t);
ll sum=dp[t];
for(auto x:v2){
int node=x.fi;
int node1=x.se.fi;
ll s2=x.se.se.fi;
ll s4=x.se.se.se;
if(dp[node]!=inf && dp1[node1]!=inf){
if(dp[node]+dp1[node1]+s2==sum){
a2[s4]=1;
}
}
if(dp[node1]!=inf && dp1[node]!=inf){
if(dp[node1]+dp1[node]+s2==sum){
a2[s4]=1;
}
}
}
for(auto x:v2){
int node=x.fi;
int node1=x.se.fi;
ll s2=x.se.se.fi;
ll s4=x.se.se.se;
if(a2[s4]==1){
v3[node].push_back({node1,0});
v3[node1].push_back({node,0});
}
else{
v3[node].push_back({node1,s2});
v3[node1].push_back({node,s2});
}
}
dick2(u);
cout << dp[v];
return 0;
}