#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=998244353;
vector<int> e[1000010];
int n,t,rt;
int fa[100010],sz[100010],a[100010];
int f[1010][1010],g[1010][1010];
void dfs(int x,int pre)
{
	fa[x]=pre;sz[x]=1;
	for(int i=0;i<e[x].size();i++)
		if(e[x][i]^pre)
			dfs(e[x][i],x),sz[x]+=sz[e[x][i]];
}
int vis[1010];
int qsm(int x,int y)
{
	int res=1;
	while(y)
	{
		if(y&1)
			res=res*x%mod;
		x=x*x%mod;
		y>>=1;
	}
	return res;
}
void dfs2(int x,int mn,int st,int p)
{
	if(vis[x]>1e9)
		return ;
	if(vis[x]==0)
		f[st][x]=(f[st][x]+mn*p)%mod;
	vis[x]++;
	int sum=0;
	for(int i=0;i<e[x].size();i++)
		sum+=vis[e[x][i]]==0;
	for(int i=0;i<e[x].size();i++)
		if(vis[e[x][i]]==0&&e[x][i]!=fa[x])
			dfs2(e[x][i],min(mn,a[e[x][i]]),st,p*qsm(sum,mod-2));
	if(sum==0)
		dfs2(fa[x],mn,st,p);
	vis[x]--;
}
void subtask1()
{
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			f[i][j]=0;
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		vis[fa[i]]=1145141919;
		dfs2(i,a[i],i,1);
		vis[fa[i]]=0;
	} 
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			ans=(ans+f[i][j])%mod; 
	printf("%lld\n",ans);
}
void subtask2()
{
	int ans=0;
	for(int i=1;i<=n;i++)
		ans=(ans+a[i])%mod;
	for(int i=1;i<=n;i++)
		if(a[i]<a[rt])
		{
			
		}
}
void subtask3()
{
	
}
signed main()
{
	freopen("dfs.in","r",stdin);
	freopen("dfs.out","w",stdout);
	scanf("%lld",&t);
	while(t--)
	{
		scanf("%lld%lld",&n,&rt);
		for(int i=1;i<=n;i++)
			scanf("%lld",&a[i]),e[i].clear();
		for(int i=2;i<=n;i++)
		{
			int x,y;
			scanf("%lld%lld",&x,&y);
			e[x].push_back(y);
			e[y].push_back(x);
		}
		dfs(rt,0);
		if(n<=10)
		{
			subtask1();
			continue;
		}
		if(e[rt].size()==n-1)
		{
			subtask2();
			continue;
		}
		subtask3();
	}	
}
