int N, E;
vector<pii> links[810];
int get_dist(int s, int e){
vector<int> dist(N+1, 1e9);
priority_queue<pii, vector<pii>, greater<pii>> pq;
dist[s] = 0;
pq.push({0, s});
while(!pq.empty()){
auto [d, u] = pq.top(); pq.pop();
if(dist[u] < d) continue;
if(u == e) return d;
for(auto [v, w]: links[u]){
if(dist[v] > d+w){
dist[v] = d+w;
pq.push({dist[v], v});
}
}
}
return 1e8;
}
void solve(){
cin >> N >> E;
rep(i, 0, E){
int u, v, w; cin >> u >> v >> w;
links[u].push_back({v, w});
links[v].push_back({u, w});
}
int v1, v2; cin >> v1 >> v2;
int ans = min(get_dist(1, v1) + get_dist(v1, v2) + get_dist(v2, N), get_dist(1, v2) + get_dist(v2, v1) + get_dist(v1, N));
if(ans >= 1e8) cout << -1;
else cout << ans;
}