#include <bits/stdc++.h>
using namespace std;
vector<int> dijkstra(vector<vector<pair<int,int>>>& adj, int source, int target) {
int n = adj.size();
priority_queue<pair<int,int>> q;
vector<int> distance(n, INT64_MAX);
vector<bool> visit(n, false);
distance[source] = 0;
q.push({0, source});
while (!q.empty()) {
int a = q.top().second;
q.pop();
if (!visit[a]) {
visit[a] = true;
for (auto u: adj[a]) {
int b = u.first, w = u.second;
distance[b] = min(distance[b], distance[a]+w);
q.push({-distance[b], b});
}
}
}
return distance;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
#ifndef ONLINE_JUDGE
freopen("in", "r", stdin);
#endif
int t;
cin >> t;
while (t--) {
int n, e;
cin >> n >> e;
vector<vector<pair<int,int>>> adj(n+1);
for (int i=0; i<e; i++) {
int x, y, z;
cin >> x >> y >> z;
adj[x].push_back({y, z});
}
int source, target;
cin >> source >> target;
vector<int> res = dijkstra(adj, source, target);
if (res[n] < INT64_MAX) {
cout << res[n] << '\n';
} else {
cout << "NO\n";
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PiBkaWprc3RyYSh2ZWN0b3I8dmVjdG9yPHBhaXI8aW50LGludD4+PiYgYWRqLCBpbnQgc291cmNlLCBpbnQgdGFyZ2V0KSB7CiAgICBpbnQgbiA9IGFkai5zaXplKCk7CiAgICBwcmlvcml0eV9xdWV1ZTxwYWlyPGludCxpbnQ+PiBxOwogICAgdmVjdG9yPGludD4gZGlzdGFuY2UobiwgSU5UNjRfTUFYKTsKICAgIHZlY3Rvcjxib29sPiB2aXNpdChuLCBmYWxzZSk7CiAgICBkaXN0YW5jZVtzb3VyY2VdID0gMDsKICAgIHEucHVzaCh7MCwgc291cmNlfSk7CiAgICB3aGlsZSAoIXEuZW1wdHkoKSkgewogICAgICAgIGludCBhID0gcS50b3AoKS5zZWNvbmQ7CiAgICAgICAgcS5wb3AoKTsKICAgICAgICBpZiAoIXZpc2l0W2FdKSB7CiAgICAgICAgICAgIHZpc2l0W2FdID0gdHJ1ZTsKICAgICAgICAgICAgZm9yIChhdXRvIHU6IGFkalthXSkgewogICAgICAgICAgICAgICAgaW50IGIgPSB1LmZpcnN0LCB3ID0gdS5zZWNvbmQ7CiAgICAgICAgICAgICAgICBkaXN0YW5jZVtiXSA9IG1pbihkaXN0YW5jZVtiXSwgZGlzdGFuY2VbYV0rdyk7CiAgICAgICAgICAgICAgICBxLnB1c2goey1kaXN0YW5jZVtiXSwgYn0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGRpc3RhbmNlOwp9CgppbnQgbWFpbigpIHsKCiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CgogICAgI2lmbmRlZiBPTkxJTkVfSlVER0UgCiAgICAgICAgZnJlb3BlbigiaW4iLCAiciIsIHN0ZGluKTsgIAogICAgI2VuZGlmCgogICAgaW50IHQ7CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBpbnQgbiwgZTsKICAgICAgICBjaW4gPj4gbiA+PiBlOwogICAgICAgIHZlY3Rvcjx2ZWN0b3I8cGFpcjxpbnQsaW50Pj4+IGFkaihuKzEpOwogICAgICAgIGZvciAoaW50IGk9MDsgaTxlOyBpKyspIHsKICAgICAgICAgICAgaW50IHgsIHksIHo7CiAgICAgICAgICAgIGNpbiA+PiB4ID4+IHkgPj4gejsKICAgICAgICAgICAgYWRqW3hdLnB1c2hfYmFjayh7eSwgen0pOwogICAgICAgIH0KICAgICAgICBpbnQgc291cmNlLCB0YXJnZXQ7CiAgICAgICAgY2luID4+IHNvdXJjZSA+PiB0YXJnZXQ7CiAgICAgICAgdmVjdG9yPGludD4gcmVzID0gZGlqa3N0cmEoYWRqLCBzb3VyY2UsIHRhcmdldCk7CiAgICAgICAgaWYgKHJlc1tuXSA8IElOVDY0X01BWCkgewogICAgICAgICAgICBjb3V0IDw8IHJlc1tuXSA8PCAnXG4nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvdXQgPDwgIk5PXG4iOwogICAgICAgIH0KICAgIH0KICAgIAogICAgCiAgICAKICAgIHJldHVybiAwOwp9Cg==