#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main() {
while(1)
{
long long int row,col;
cin>>row>>col;
if(row==0&&col==0)
break;
long long int graph[row][row];
vector<pair<long long int,long long int>>dist(row);
for(int i=0;i<row;i++)
for(int j=0;j<row;j++)
{
graph[i][j] = INT_MAX;
dist[j].second=(-1);
}
long long int src,end;
cin>>src>>end;
for(int i=0;i<col;i++)
{
long long int u,v,w;
cin>>u>>v>>w;
graph[u][v] = w;
dist[v].second = u;
}
/*for(int i=0;i<row;i++){
for(int j=0;j<row;j++)
cout<<graph[i][j]<<" ";
cout<<endl;}*/
long long int count=0,save,parent[row],t=2,flag=0;
bool visited[row];
for(int i=0;i<row;i++)
parent[i] = (-1);
//parent[src] = (-1);
while(1){
flag++;
memset(visited,false,sizeof(visited));
for(int i=0;i<row;i++)
dist[i].first=INT_MAX,parent[i] = (-1);
dist[src].first=0;dist[src].second=src;parent[src] = src;
for(int i=0;i<row;i++)
{
int crt =-1;
for(int j=0;j<row;j++)
{
if(visited[j]==true)
continue;
else if(crt==(-1)||dist[crt].first>dist[j].first)
crt=j;
}//cout<<crt<<" ";
visited[crt] = true;
for(int j=0;j<row;j++)
{
if(graph[crt][j]>=0)
if(dist[j].first>dist[crt].first+graph[crt][j]&&graph[crt][j]!=INT_MAX)
dist[j].first = dist[crt].first+graph[crt][j],parent[j] = crt;//cout<<crt<<j<<" ";
//cout<<endl;
}
}
int k=end;
while(k!=src&&parent[k]!=(-1))
{
graph[parent[k]][k]=(INT_MAX);
count++;
k = parent[k];
if(k==(-1))
{
cout<<"-1"<<endl;
break;
}
}
//cout<<endl;
if(dist[end].first==INT_MAX&&count<=col)
{
cout<<"-1"<<endl;
break;
}
else if(flag==1)
save = dist[end].first;
else if(save<dist[end].first&&count<=col)
{
cout<<dist[end].first<<endl;
break;
}
else if(count>col)
{
cout<<"-1"<<endl;
break;
}
}
}
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmludCBtYWluKCkgewoJd2hpbGUoMSkKCXsKCQlsb25nIGxvbmcgaW50IHJvdyxjb2w7CgkJY2luPj5yb3c+PmNvbDsKCQlpZihyb3c9PTAmJmNvbD09MCkKCQlicmVhazsKCQlsb25nIGxvbmcgaW50IGdyYXBoW3Jvd11bcm93XTsKCQl2ZWN0b3I8cGFpcjxsb25nIGxvbmcgaW50LGxvbmcgbG9uZyBpbnQ+PmRpc3Qocm93KTsKCQlmb3IoaW50IGk9MDtpPHJvdztpKyspCgkJZm9yKGludCBqPTA7ajxyb3c7aisrKQoJCXsKCQkJZ3JhcGhbaV1bal0gPSBJTlRfTUFYOwoJCQlkaXN0W2pdLnNlY29uZD0oLTEpOwoJCX0KCQlsb25nIGxvbmcgaW50IHNyYyxlbmQ7CgkJY2luPj5zcmM+PmVuZDsKCQlmb3IoaW50IGk9MDtpPGNvbDtpKyspCgkJewoJCQlsb25nIGxvbmcgaW50IHUsdix3OwoJCQljaW4+PnU+PnY+Pnc7CgkJCWdyYXBoW3VdW3ZdID0gdzsKCQkJZGlzdFt2XS5zZWNvbmQgPSB1OwoJCX0KCQkvKmZvcihpbnQgaT0wO2k8cm93O2krKyl7CgkJZm9yKGludCBqPTA7ajxyb3c7aisrKQoJCWNvdXQ8PGdyYXBoW2ldW2pdPDwiICI7CgkJY291dDw8ZW5kbDt9Ki8KCQlsb25nIGxvbmcgaW50IGNvdW50PTAsc2F2ZSxwYXJlbnRbcm93XSx0PTIsZmxhZz0wOwoJCWJvb2wgdmlzaXRlZFtyb3ddOwoJCWZvcihpbnQgaT0wO2k8cm93O2krKykKCQlwYXJlbnRbaV0gPSAoLTEpOwoJCS8vcGFyZW50W3NyY10gPSAoLTEpOwoJCXdoaWxlKDEpewoJCWZsYWcrKzsKCQltZW1zZXQodmlzaXRlZCxmYWxzZSxzaXplb2YodmlzaXRlZCkpOwoJCWZvcihpbnQgaT0wO2k8cm93O2krKykKCQlkaXN0W2ldLmZpcnN0PUlOVF9NQVgscGFyZW50W2ldID0gKC0xKTsKCQlkaXN0W3NyY10uZmlyc3Q9MDtkaXN0W3NyY10uc2Vjb25kPXNyYztwYXJlbnRbc3JjXSA9IHNyYzsKCQlmb3IoaW50IGk9MDtpPHJvdztpKyspCgkJewoJCQlpbnQgY3J0ID0tMTsKCQkJZm9yKGludCBqPTA7ajxyb3c7aisrKQoJCQl7CgkJCQlpZih2aXNpdGVkW2pdPT10cnVlKQoJCQkJY29udGludWU7CgkJCQllbHNlIGlmKGNydD09KC0xKXx8ZGlzdFtjcnRdLmZpcnN0PmRpc3Rbal0uZmlyc3QpCgkJCQljcnQ9ajsKCQkJfS8vY291dDw8Y3J0PDwiICI7CgkJCXZpc2l0ZWRbY3J0XSA9IHRydWU7CgkJCWZvcihpbnQgaj0wO2o8cm93O2orKykKCQkJewoJCQkJaWYoZ3JhcGhbY3J0XVtqXT49MCkKCQkJCWlmKGRpc3Rbal0uZmlyc3Q+ZGlzdFtjcnRdLmZpcnN0K2dyYXBoW2NydF1bal0mJmdyYXBoW2NydF1bal0hPUlOVF9NQVgpCgkJCQlkaXN0W2pdLmZpcnN0ID0gZGlzdFtjcnRdLmZpcnN0K2dyYXBoW2NydF1bal0scGFyZW50W2pdID0gY3J0Oy8vY291dDw8Y3J0PDxqPDwiICI7CgkJCQkvL2NvdXQ8PGVuZGw7CgkJCX0KCQkJCiAKCQl9CgkJaW50IGs9ZW5kOwoJCXdoaWxlKGshPXNyYyYmcGFyZW50W2tdIT0oLTEpKQoJCXsKCQkJZ3JhcGhbcGFyZW50W2tdXVtrXT0oSU5UX01BWCk7CgkJCWNvdW50Kys7CgkJCWsgPSBwYXJlbnRba107CgkJCWlmKGs9PSgtMSkpCgkJCXsKCQkJCWNvdXQ8PCItMSI8PGVuZGw7CgkJCQlicmVhazsKCQkJfQoJCQkKCQl9CgkJLy9jb3V0PDxlbmRsOwoJCWlmKGRpc3RbZW5kXS5maXJzdD09SU5UX01BWCYmY291bnQ8PWNvbCkKCQl7CgkJCWNvdXQ8PCItMSI8PGVuZGw7CgkJCWJyZWFrOwoJCX0KCQllbHNlIGlmKGZsYWc9PTEpCgkJc2F2ZSA9IGRpc3RbZW5kXS5maXJzdDsKCQllbHNlIGlmKHNhdmU8ZGlzdFtlbmRdLmZpcnN0JiZjb3VudDw9Y29sKQoJCXsKCQkJY291dDw8ZGlzdFtlbmRdLmZpcnN0PDxlbmRsOwoJCQlicmVhazsKCQl9CgkJZWxzZSBpZihjb3VudD5jb2wpCgkJewoJCQljb3V0PDwiLTEiPDxlbmRsOwoJCQlicmVhazsKCQl9CgkJfQoJfQoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJcmV0dXJuIDA7Cn0=