#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define M 10005
#define N 1005
#define LL long long
using namespace std;
int t,n,m,S,F,ans,diss,c,num;
int dis[N],head[N];
bool vis[N];
map<LL,LL>s;
struct ljh
{
int next,to,w;
}e[M];
inline void add(int x,int y,int z)
{
e[c].next=head[x];
e[c].w=z;
e[c].to=y;
head[x]=c++;
}
void dfs(int x,int fa,int k)
{
// cout<<x<<" "<<fa<<" "<<k<<endl;
if(x==F)
{
q.push(k);
// num++;
// s[num]=k;
// if(k==diss||k==diss+1)ans++;
return;
}
vis[x]=1;
for(int i=head[x];i!=-1;i=e[i].next)
{
int nex=e[i].to;
if(nex==fa)continue;
if(!vis[nex])dfs(nex,x,k+e[i].w);
// k-=e[i].w;
}
vis[x]=0;//回溯,把每条边都跑到
}
int main()
{
scanf("%d",&t);
while(t--)
{
num=0;
c=0;
ans=0;
memset(head,-1,sizeof(head));
while(!q.empty())q.pop();
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
}
scanf("%d%d",&S,&F);
// SPFA(S);
dfs(S,-1,0);
int diss=q.top();
while(!q.empty())
{
if(q.top()==diss||q.top()==diss+1){ans++;
q.pop();}
else break;
}
// for(LL i=1;i<=k;i++)if(s[i]==dis[F]||s[i]==dis[F]+1)ans++;
printf("%d\n",ans);
}
return 0;
}