#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Rg register
#define RI Rg int
#define Cn const
#define CI Cn int&
#define I inline
#define W while
#define N 400000
#define X 998244353
#define add(x,y) (e[++ee].nxt=lnk[x],e[lnk[x]=ee].to=y)
using namespace std;
namespace FastIO
{
	#define FS 100000
	#define tc() (FA==FB&&(FB=(FA=FI)+fread(FI,1,FS,stdin),FA==FB)?EOF:*FA++)
	#define pc(c) (FC==FE&&(clear(),0),*FC++=c)
	int OT;char oc,FI[FS],FO[FS],OS[30],*FA=FI,*FB=FI,*FC=FO,*FE=FO+FS;
	I void clear() {fwrite(FO,1,FC-FO,stdout),FC=FO;}
	Tp I void read(Ty& x) {x=0;W(!isdigit(oc=tc()));W(x=(x<<3)+(x<<1)+(oc&15),isdigit(oc=tc()));}
	Tp I void writeln(Ty x) {W(OS[++OT]=x%10+48,x/=10);W(OT) pc(OS[OT--]);pc('\n');}
}using namespace FastIO;
int n,rt,a[N+5],c[N+5],p[N+5],Inv[N+5],dv[N+5],pp[N+5],ee,lnk[N+5];struct edge {int to,nxt;}e[N<<1];
I int QP(RI x,RI y) {RI t=1;W(y) y&1&&(t=1LL*t*x%X),x=1LL*x*x%X,y>>=1;return t;}
int f[N+5],s[N+5],sa[N+5],sb[N+5],g[N+5],w[N+5],d[N+5];
void Init(CI x)
{
	c[x]=w[x]=d[x]=s[x]=0;
	for(RI i=lnk[x],y;i;i=e[i].nxt) (y=e[i].to)^f[x]&&(g[y]=g[f[y]=x]+1,Init(y),s[x]+=s[y]+1);
	sa[x]=s[x],sb[x]=0;
}
I int Calc(RI x)
{
	RI y,t=1LL*(s[x]+1)*g[x]%X;
	for(y=f[x];!w[x]&&y&&!d[y];y=f[x=y])
		t=(t+((sa[y]-1LL*(s[x]+1)*Inv[c[y]+1]%X+X)*Inv[c[y]+2]+1LL*sb[y]*Inv[c[y]+1])%X*g[y])%X;
	return t;
}
void dfs(CI x,RI v)
{
	g[x]=(g[x]+v)%X;for(RI i=lnk[x],y;i;i=e[i].nxt) (y=e[i].to)^f[x]&&!d[y]&&(dfs(y,1LL*v*Inv[c[x]+!w[y]]%X),0);
}
void DFS(CI x,CI o)
{
	for(RI i=lnk[x],y,cc;i;i=e[i].nxt) (y=e[i].to)^o&&y^f[x]&&!d[y]&&(cc=c[x]-w[y],dfs(y,(1LL*cc*Inv[cc+1]-1+X)%X*g[x]%X),0);
}
I void Del(RI x)
{
	RI y,s1,s2;d[x]=1;
	for(RI i=lnk[x];i;i=e[i].nxt) (y=e[i].to)^f[x]&&!d[y]&&(dfs(y,1LL*(X-g[x])*Inv[c[x]+!w[y]]%X),0);
	for(y=f[x],s1=s[x],s[x]=X-1;y&&!d[y];y=f[x=y])
	{
		if(!w[x])
		{
			w[x]=1,++c[y],DFS(y,x);
			sa[y]=(sa[y]-1LL*(s1+1)*Inv[c[y]]%X+X)%X*c[y]%X*Inv[c[y]+1]%X;
			sb[y]=(1LL*sb[y]*(c[y]-1)+s1+1)%X*Inv[c[y]]%X;
		}
		s2=s[y],sb[y]=(sb[y]+1LL*(s[x]-s1+X)*Inv[c[y]])%X,s[y]=(sa[y]+sb[y])%X,s1=s2;
	}
}
int main()
{
	freopen("dfs.in","r",stdin),freopen("dfs.out","w",stdout);
	RI Tt,i,x,y,t=0;read(Tt);W(Tt--)
	{
		for(read(n),read(rt),ee=0,i=1;i<=n;++i) lnk[i]=pp[i]=0;
		for(Inv[1]=1,i=2;i<=n;++i) Inv[i]=1LL*(X-X/i)*Inv[X%i]%X;
		for(i=1;i<=n;++i) read(a[i]),dv[i]=a[i];sort(dv+1,dv+n+1);
		for(i=1;i<=n;++i) pp[a[i]=lower_bound(dv+1,dv+n+1,a[i])-dv]?a[i]=++pp[a[i]]:pp[a[i]]=a[i],p[a[i]]=i;
		for(i=1;i^n;++i) read(x),read(y),add(x,y),add(y,x);f[rt]=0,g[rt]=1,Init(rt);
		for(t=0,i=1;i<=n;++i) t=(t+1LL*dv[i]*Calc(p[i]))%X,Del(p[i]);writeln(t);
	}return clear(),0;
}