#include<bits/stdc++.h>
#define pb push_back
#define SZ(x) ((int)((x).size()))
template<typename _Tp>void read(_Tp &x){
	char ch=getchar();bool f=0;while(!isdigit(ch))f|=ch=='-',ch=getchar();
	x=ch&15,ch=getchar();while(isdigit(ch))x=x*10+(ch&15),ch=getchar();
	if(f)x=-x;
}
template<typename _Tp,typename ...Args>void read(_Tp &x,Args &...args){read(x),read(args...);}
const int N=400005,mod=998244353;typedef long long ll;
template<typename _Tp1,typename _Tp2>inline void add(_Tp1 &a,_Tp2 b){a=a+b>=mod?a+b-mod:a+b;}
template<typename _Tp1,typename _Tp2>inline void sub(_Tp1 &a,_Tp2 b){a=a<b?a+mod-b:a-b;}
ll ksm(ll a,ll b=mod-2){ll res=1;while(b){if(b&1)res=res*a%mod;a=a*a%mod,b>>=1;}return res;}
ll ifac[N],inv[N];std::vector<int> e[N];int a[N];
void dfs0(int x,int fa){
	if(fa)e[x].erase(std::find(e[x].begin(), e[x].end(),fa));
	for(auto v:e[x])if(v!=fa)dfs0(v,x);
}
int ans,tot,n,mn;
void dfs2(int x){
	mn=std::min(mn,a[x]);add(ans,mn%mod);
	for(auto v:e[x])dfs2(v);
}
void dfs1(int dep){
	if(dep==n+1){
		++tot;mn=1e9;
		for(int x=1;x<=n;++x)mn=1e9,dfs2(x);
		return;
	}
	std::sort(e[dep].begin(), e[dep].end());
	do{
		dfs1(dep+1);
	}while(std::next_permutation(e[dep].begin(), e[dep].end()));
}
void MAIN(){
	int rt;read(n,rt);
	for(int i=0;i<=n;++i)e[i].clear();
	for(int i=1;i<=n;++i)read(a[i]);
	for(int i=1,x,y;i<n;++i)read(x,y),e[x].pb(y),e[y].pb(x);
	if(n==1){printf("%d\n",a[1]%mod);return;}
	dfs0(rt,0);
	for(int i=1;i<=n;++i)std::sort(e[i].begin(),e[i].end());
	tot=0,ans=0,dfs1(1);
	printf("%lld\n",1LL*ans*ksm(tot)%mod);
}
int main(){
	inv[0]=inv[1]=1;for(int i=2;i<N;++i)inv[i]=inv[mod%i]*(mod-mod/i)%mod;
	ifac[0]=ifac[1]=1;for(int i=2;i<N;++i)ifac[i]=ifac[i-1]*inv[i]%mod;
	int _;read(_);
	while(_--)MAIN();
	return 0;
}
