#include <iostream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
typedef pair<int, int> pii;
typedef vector<vector<pii>> Graph;
void dijkstra(const Graph& graph, int start, vector<int>& dist) {
priority_queue<pii, vector<pii>, greater<pii>> pq;
pq.push({0, start});
dist[start] = 0;
while (!pq.empty()) {
int u = pq.top().second;
pq.pop();
for (const auto& edge : graph[u]) {
int v = edge.first;
int w = edge.second;
if (dist[v] > dist[u] + w) {
dist[v] = dist[u] + w;
pq.push({dist[v], v});
}
}
}
}
int main() {
int n, m;
cin >> n >> m;
Graph graph(n);
for (int i = 0; i < m; i++) {
int u, v, w;
cin >> u >> v >> w;
graph[u].push_back({v, w});
graph[v].push_back({u, w});
}
int start, end;
cin >> start >> end;
vector<int> dist(n, INT_MAX);
dijkstra(graph, start, dist);
cout << "Il cammino piu' breve da " << start << " a " << end << " e' " << dist[end] << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxjbGltaXRzPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgcGFpcjxpbnQsIGludD4gcGlpOwp0eXBlZGVmIHZlY3Rvcjx2ZWN0b3I8cGlpPj4gR3JhcGg7Cgp2b2lkIGRpamtzdHJhKGNvbnN0IEdyYXBoJiBncmFwaCwgaW50IHN0YXJ0LCB2ZWN0b3I8aW50PiYgZGlzdCkgewogICAgcHJpb3JpdHlfcXVldWU8cGlpLCB2ZWN0b3I8cGlpPiwgZ3JlYXRlcjxwaWk+PiBwcTsKICAgIHBxLnB1c2goezAsIHN0YXJ0fSk7CiAgICBkaXN0W3N0YXJ0XSA9IDA7CgogICAgd2hpbGUgKCFwcS5lbXB0eSgpKSB7CiAgICAgICAgaW50IHUgPSBwcS50b3AoKS5zZWNvbmQ7CiAgICAgICAgcHEucG9wKCk7CgogICAgICAgIGZvciAoY29uc3QgYXV0byYgZWRnZSA6IGdyYXBoW3VdKSB7CiAgICAgICAgICAgIGludCB2ID0gZWRnZS5maXJzdDsKICAgICAgICAgICAgaW50IHcgPSBlZGdlLnNlY29uZDsKCiAgICAgICAgICAgIGlmIChkaXN0W3ZdID4gZGlzdFt1XSArIHcpIHsKICAgICAgICAgICAgICAgIGRpc3Rbdl0gPSBkaXN0W3VdICsgdzsKICAgICAgICAgICAgICAgIHBxLnB1c2goe2Rpc3Rbdl0sIHZ9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBpbnQgbiwgbTsKICAgIGNpbiA+PiBuID4+IG07CgogICAgR3JhcGggZ3JhcGgobik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewogICAgICAgIGludCB1LCB2LCB3OwogICAgICAgIGNpbiA+PiB1ID4+IHYgPj4gdzsKICAgICAgICBncmFwaFt1XS5wdXNoX2JhY2soe3YsIHd9KTsKICAgICAgICBncmFwaFt2XS5wdXNoX2JhY2soe3UsIHd9KTsKICAgIH0KCiAgICBpbnQgc3RhcnQsIGVuZDsKICAgIGNpbiA+PiBzdGFydCA+PiBlbmQ7CgogICAgdmVjdG9yPGludD4gZGlzdChuLCBJTlRfTUFYKTsKICAgIGRpamtzdHJhKGdyYXBoLCBzdGFydCwgZGlzdCk7CgogICAgY291dCA8PCAiSWwgY2FtbWlubyBwaXUnIGJyZXZlIGRhICIgPDwgc3RhcnQgPDwgIiBhICIgPDwgZW5kIDw8ICIgZScgIiA8PCBkaXN0W2VuZF0gPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==