#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define MAX 1000
#define INF 100000000
typedef struct {
int to;
int weight;
}Edge;
Edge adj[MAX][MAX];
int edgeCount[MAX];
int dist[MAX];
int visited[MAX];
int n, m;
void dijkstra(int start){
for(int i=0; i<n; i++){
dist[i] = INF;
visited[i] = 0;
}
dist[start] = 0;
for(int i=0; i<n; i++){
int u = -1;
// Pick the unvisted node with the smallest distance
for(int j=0; j<n; j++){
if(!visited[j] && (u == -1 || dist[j] < dist[u])){
u = j;
}
}
if(dist[u] == INF) break; // Remaining nodes are unreachable
visited[u] = 1;
//Relax edges
for(int k=0; k<edgeCount[u]; k++){
int v = adj[u][k].to;
int w = adj[u][k].weight;
if(dist[u] +w <dist[v]){
dist[v] = dist[u]+w;
}
}
}
}
int main() {
//Read all edges
for(int i=0; i<m; i++){
int u, v, w;
scanf("%d %d %d", &u
, &v
, &w
); adj[u][edgeCount[u]].to = v;
adj[u][edgeCount[u]].weight = w;
edgeCount[u]++;
}
int start, end;
scanf("%d %d", &start
, &end
); dijkstra(start);
if(dist[end] == INF)
else
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
return 0;
}
ICNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxtYXRoLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNkZWZpbmUgTUFYIDEwMDAKI2RlZmluZSBJTkYgMTAwMDAwMDAwCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgdG87CiAgICBpbnQgd2VpZ2h0Owp9RWRnZTsKCkVkZ2UgYWRqW01BWF1bTUFYXTsKaW50IGVkZ2VDb3VudFtNQVhdOwoKaW50IGRpc3RbTUFYXTsKaW50IHZpc2l0ZWRbTUFYXTsKaW50IG4sIG07Cgp2b2lkIGRpamtzdHJhKGludCBzdGFydCl7CiAgICBmb3IoaW50IGk9MDsgaTxuOyBpKyspewogICAgICAgIGRpc3RbaV0gPSBJTkY7CiAgICAgICAgdmlzaXRlZFtpXSA9IDA7CiAgICB9CgogICAgZGlzdFtzdGFydF0gPSAwOwoKICAgIGZvcihpbnQgaT0wOyBpPG47IGkrKyl7CiAgICAgICAgaW50IHUgPSAtMTsKCiAgICAgICAgLy8gUGljayB0aGUgdW52aXN0ZWQgbm9kZSB3aXRoIHRoZSBzbWFsbGVzdCBkaXN0YW5jZQoKICAgICAgICBmb3IoaW50IGo9MDsgajxuOyBqKyspewogICAgICAgICAgICBpZighdmlzaXRlZFtqXSAmJiAodSA9PSAtMSB8fCBkaXN0W2pdIDwgZGlzdFt1XSkpewogICAgICAgICAgICAgICAgdSA9IGo7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmKGRpc3RbdV0gPT0gSU5GKSBicmVhazsgLy8gUmVtYWluaW5nIG5vZGVzIGFyZSB1bnJlYWNoYWJsZQogICAgICAgIHZpc2l0ZWRbdV0gPSAxOwoKICAgICAgICAvL1JlbGF4IGVkZ2VzCiAgICAgICAgZm9yKGludCBrPTA7IGs8ZWRnZUNvdW50W3VdOyBrKyspewogICAgICAgICAgICBpbnQgdiA9IGFkalt1XVtrXS50bzsKICAgICAgICAgICAgaW50IHcgPSBhZGpbdV1ba10ud2VpZ2h0OwoKICAgICAgICAgICAgaWYoZGlzdFt1XSArdyA8ZGlzdFt2XSl7CiAgICAgICAgICAgICAgICBkaXN0W3ZdID0gZGlzdFt1XSt3OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpIHsKCiAgICBzY2FuZigiJWQgJWQiLCZuLCAmbSk7CiAgICAvL1JlYWQgYWxsIGVkZ2VzCiAgICBmb3IoaW50IGk9MDsgaTxtOyBpKyspewogICAgICAgIGludCB1LCB2LCB3OwogICAgICAgIHNjYW5mKCIlZCAlZCAlZCIsICZ1LCAmdiwgJncpOwogICAgICAgIGFkalt1XVtlZGdlQ291bnRbdV1dLnRvID0gdjsKICAgICAgICBhZGpbdV1bZWRnZUNvdW50W3VdXS53ZWlnaHQgPSB3OwogICAgICAgIGVkZ2VDb3VudFt1XSsrOwogICAgfQoKICAgIGludCBzdGFydCwgZW5kOwogICAgc2NhbmYoIiVkICVkIiwgJnN0YXJ0LCAmZW5kKTsKICAgICBkaWprc3RyYShzdGFydCk7CgogICAgIGlmKGRpc3RbZW5kXSA9PSBJTkYpCiAgICAgICAgcHJpbnRmKCItMVxuIik7CiAgICAgZWxzZQogICAgICAgIHByaW50ZigiJWRcbiIsZGlzdFtlbmRdKTsKICAgIC8qIEVudGVyIHlvdXIgY29kZSBoZXJlLiBSZWFkIGlucHV0IGZyb20gU1RESU4uIFByaW50IG91dHB1dCB0byBTVERPVVQgKi8gICAgCiAgICByZXR1cm4gMDsKfSA=