#include<stdio.h>
#include<list>
using namespace std;
long long arr[10000][10000];
long long minimum(long long a,long long b)
{
if(a<b)
return a;
else
return b;
}
void bfs(long long start,long long n,long long end)
{
long long visit[n],cost[n];
for(long long i=0;i<n;i++)
visit[i]=0,cost[i]=0;
list <long long> abc;
abc.push_back(start);
while(!abc.empty())
{
long long front=abc.front();
abc.pop_front();
for(long long i=0;i<n;i++)
{
if(arr[front][i]!=0)
{
if(visit[i]==0)
{
visit[i]=1;
cost[i]=arr[front][i];
}
else
{
cost[i]=minimum(cost[i],cost[front]+arr[front][i]);
}
}
}
}
if(visit[end])
printf("%lld\n",cost[end]);
else
printf("NONE\n");
}
int main()
{
long long test,s,e,d,b,g,m,n;
scanf("%lld",&test);
while(test--)
{
scanf("%lld%lld%lld%lld",&n,&m,&b,&g);
b--;
g--;
for(long long i=0;i<n;i++)
for(long long j=0;j<n;j++)
arr[i][j]=0;
while(m--)
{
scanf("%lld%lld%lld",&s,&e,&d);
s--;
e--;
arr[s][e]=arr[e][s]=d;
}
bfs(b,n,g);
}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8bGlzdD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKbG9uZyBsb25nIGFyclsxMDAwMF1bMTAwMDBdOwpsb25nIGxvbmcgbWluaW11bShsb25nIGxvbmcgYSxsb25nIGxvbmcgYikKewoJaWYoYTxiKQoJCXJldHVybiBhOwoJZWxzZQoJCXJldHVybiBiOwp9CnZvaWQgYmZzKGxvbmcgbG9uZyBzdGFydCxsb25nIGxvbmcgbixsb25nIGxvbmcgZW5kKQp7Cglsb25nIGxvbmcgdmlzaXRbbl0sY29zdFtuXTsKCWZvcihsb25nIGxvbmcgaT0wO2k8bjtpKyspCgkJdmlzaXRbaV09MCxjb3N0W2ldPTA7CglsaXN0IDxsb25nIGxvbmc+IGFiYzsKCWFiYy5wdXNoX2JhY2soc3RhcnQpOwoJCgl3aGlsZSghYWJjLmVtcHR5KCkpCgl7CgkJbG9uZyBsb25nIGZyb250PWFiYy5mcm9udCgpOwoJCWFiYy5wb3BfZnJvbnQoKTsKCQlmb3IobG9uZyBsb25nIGk9MDtpPG47aSsrKQoJCXsKCQkJaWYoYXJyW2Zyb250XVtpXSE9MCkKCQkJewoJCQkJaWYodmlzaXRbaV09PTApCgkJCQl7CgkJCQkJdmlzaXRbaV09MTsKCQkJCQljb3N0W2ldPWFycltmcm9udF1baV07CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJY29zdFtpXT1taW5pbXVtKGNvc3RbaV0sY29zdFtmcm9udF0rYXJyW2Zyb250XVtpXSk7CgkJCQl9CgkJCX0KCQl9Cgl9CglpZih2aXNpdFtlbmRdKQoJCXByaW50ZigiJWxsZFxuIixjb3N0W2VuZF0pOwoJZWxzZQoJCXByaW50ZigiTk9ORVxuIik7Cn0KaW50IG1haW4oKQp7Cglsb25nIGxvbmcgdGVzdCxzLGUsZCxiLGcsbSxuOwoJc2NhbmYoIiVsbGQiLCZ0ZXN0KTsKCXdoaWxlKHRlc3QtLSkKCXsKCQlzY2FuZigiJWxsZCVsbGQlbGxkJWxsZCIsJm4sJm0sJmIsJmcpOwoJCWItLTsKCQlnLS07CgkJZm9yKGxvbmcgbG9uZyBpPTA7aTxuO2krKykKCQlmb3IobG9uZyBsb25nIGo9MDtqPG47aisrKQoJCQlhcnJbaV1bal09MDsKCQl3aGlsZShtLS0pCgkJewoJCQlzY2FuZigiJWxsZCVsbGQlbGxkIiwmcywmZSwmZCk7CgkJCXMtLTsKCQkJZS0tOwoJCQlhcnJbc11bZV09YXJyW2VdW3NdPWQ7CgkJfQoJCWJmcyhiLG4sZyk7Cgl9CglyZXR1cm4gMDsKfQ==