#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 1e4+5;
const int inf = 1e9;
int n, m;
// krawedz to para (wierzcholek_docelowy, waga_krawedzi)
vector<pair<int, int>> G[MAX_N];
int dist[MAX_N];
void solve() {
cin >> n >> m;
// czyszczenie po poprzednim tescie
for (int i = 1; i <= n; i++) {
G[i].clear();
dist[i] = inf;
}
for (int i = 0; i < m; i++) {
int a, b, c;
cin >> a >> b >> c;
G[a].push_back(make_pair(b, c));
}
int start, meta;
cin >> start >> meta;
// przechowujemy pary (odleglosc_od_startu, nr_wierzcholka)
multiset<pair<int, int>> S;
S.insert(make_pair(0, start));
while (!S.empty()) {
pair<int, int> tmp = *S.begin();
S.erase(S.begin());
int curDist = tmp.first;
int v = tmp.second;
for (pair<int, int> e: G[v]) {
int to = e.first;
int cost = e.second;
if (curDist + cost < dist[to]) {
dist[to] = curDist + cost;
S.insert(make_pair(dist[to], to));
}
}
}
if (dist[meta] == inf) {
cout << "NIE\n";
} else {
cout << dist[meta] << '\n';
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int T;
cin >> T;
for (int i = 0; i < T; i++) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYX04gPSAxZTQrNTsKY29uc3QgaW50IGluZiA9IDFlOTsKCmludCBuLCBtOwovLyBrcmF3ZWR6IHRvIHBhcmEgKHdpZXJ6Y2hvbGVrX2RvY2Vsb3d5LCB3YWdhX2tyYXdlZHppKQp2ZWN0b3I8cGFpcjxpbnQsIGludD4+IEdbTUFYX05dOwppbnQgZGlzdFtNQVhfTl07Cgp2b2lkIHNvbHZlKCkgewogICAgY2luID4+IG4gPj4gbTsKCiAgICAvLyBjenlzemN6ZW5pZSBwbyBwb3ByemVkbmltIHRlc2NpZQogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgR1tpXS5jbGVhcigpOwogICAgICAgIGRpc3RbaV0gPSBpbmY7CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyBpKyspIHsKICAgICAgICBpbnQgYSwgYiwgYzsKICAgICAgICBjaW4gPj4gYSA+PiBiID4+IGM7CiAgICAgICAgR1thXS5wdXNoX2JhY2sobWFrZV9wYWlyKGIsIGMpKTsKICAgIH0KCiAgICBpbnQgc3RhcnQsIG1ldGE7CiAgICBjaW4gPj4gc3RhcnQgPj4gbWV0YTsKCiAgICAvLyBwcnplY2hvd3VqZW15IHBhcnkgKG9kbGVnbG9zY19vZF9zdGFydHUsIG5yX3dpZXJ6Y2hvbGthKQogICAgbXVsdGlzZXQ8cGFpcjxpbnQsIGludD4+IFM7CgogICAgUy5pbnNlcnQobWFrZV9wYWlyKDAsIHN0YXJ0KSk7CgogICAgd2hpbGUgKCFTLmVtcHR5KCkpIHsKICAgICAgICBwYWlyPGludCwgaW50PiB0bXAgPSAqUy5iZWdpbigpOwogICAgICAgIFMuZXJhc2UoUy5iZWdpbigpKTsKCiAgICAgICAgaW50IGN1ckRpc3QgPSB0bXAuZmlyc3Q7CiAgICAgICAgaW50IHYgPSB0bXAuc2Vjb25kOwoKICAgICAgICBmb3IgKHBhaXI8aW50LCBpbnQ+IGU6IEdbdl0pIHsKICAgICAgICAgICAgaW50IHRvID0gZS5maXJzdDsKICAgICAgICAgICAgaW50IGNvc3QgPSBlLnNlY29uZDsKCiAgICAgICAgICAgIGlmIChjdXJEaXN0ICsgY29zdCA8IGRpc3RbdG9dKSB7CiAgICAgICAgICAgICAgICBkaXN0W3RvXSA9IGN1ckRpc3QgKyBjb3N0OwogICAgICAgICAgICAgICAgUy5pbnNlcnQobWFrZV9wYWlyKGRpc3RbdG9dLCB0bykpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmIChkaXN0W21ldGFdID09IGluZikgewogICAgICAgIGNvdXQgPDwgIk5JRVxuIjsKICAgIH0gZWxzZSB7CiAgICAgICAgY291dCA8PCBkaXN0W21ldGFdIDw8ICdcbic7CiAgICB9Cn0KCgoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKCiAgICBpbnQgVDsKICAgIGNpbiA+PiBUOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBUOyBpKyspIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQoKCiAgICByZXR1cm4gMDsKfQo=