#include <bits/stdc++.h>
using namespace std;
typedef int Cvor;
typedef int Duzina;
typedef pair<Duzina, Cvor> Par;
typedef tuple<Duzina, Cvor, Cvor> Trojka;
const Duzina INF = numeric_limits<Duzina>::infinity();
int main() {
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int n, m;cin >> n >> m;
    vector<vector<Par>> susedi(n);
    for (int i = 0; i < m; i++) {
        Cvor cvorOd, cvorDo; Duzina duzina;
        cin >> cvorOd >> cvorDo >> duzina;
        susedi[cvorOd].emplace_back(duzina, cvorDo);
    }
    int start, cilj;cin >> start >> cilj;
    vector<Duzina> duzinaPuta(n, INF);
    vector<bool> resen(n, false);
    vector<Cvor> roditelji(n, -1);
    duzinaPuta[start] = 1;
    priority_queue<Trojka, vector<Trojka>, greater<Trojka>> pq;
    pq.emplace(0.0, start, -1);
    while (!pq.empty()) {
    Cvor cvorMin, roditelj; Duzina minDuzina;
    tie(minDuzina, cvorMin, roditelj) = pq.top(); pq.pop();
    if (resen[cvorMin])
        continue;
    resen[cvorMin] = true;
    roditelji[cvorMin] = roditelj;

    if (cvorMin == cilj)
        break;
    for (const auto& p : susedi[cvorMin]) {
    Cvor cvor; Duzina duzina;
    tie(duzina, cvor) = p;
    int minDuzina1=minDuzina;
    if()
    if (!resen[cvor] && minDuzina + duzina < duzinaPuta[cvor]) {
        duzinaPuta[cvor] = minDuzina + duzina;
        pq.emplace(duzinaPuta[cvor], cvor, cvorMin);
        }
    }
}
    if (duzinaPuta[cilj] < INF) {
        
        cout<< duzinaPuta[cilj] << endl;
    }
    else
        cout << "-1" << endl;
    return 0;
}