#include <cstdio>
#include <queue>
#include <vector>
#define INF 987654321
using namespace std;
int V,E,S,P; //V,E 도시,버스 개수 S,P 출발,도착 지
vector< vector < pair <int, int> > > mat(1001);
//<도착점,비용>
vector<int> dijkstra(int s){
priority_queue<pair<int, int>,vector<pair<int, int> >,greater<pair<int, int> > > pq;
//자료형,구현체,비교연산자
//비교 연산자에는 less<자료형>과 greater<자료형>이 있습니다.
//less는 큰 순서대로, greater은 작은 순서대로 출력됨
pq.push(make_pair(0,s)); //pq는 cost,위치
vector<int> dist(V+1,INF); //dist 는 INF 값으로 초기화된 V+q개의 원소를 갖는다.
dist[s]=0;
while(!pq.empty())
{
int cost = pq.top().first, here = pq.top().second;
pq.pop();
if(dist[here] < cost) continue;
for(int i=0;i<mat[here].size();i++)
{
int nextcost = cost + mat[here][i].second;
int there = mat[here][i].first;
if(dist[there] > nextcost)
{
dist[there] = nextcost;
pq.push(make_pair(nextcost,there));
}
}
}
return dist;
}
int main(){
scanf("%d %d",&V,&E);// 도시 개수, 버스 개수
for(int i=0;i<E;i++){
int u,v,w;
scanf("%d %d %d",&u,&v,&w);
mat[u].push_back(make_pair(v,w));
}
scanf("%d %d",&S,&P);
vector<int> dist = dijkstra(S);
printf("%d",dist[P]);
}