#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
inline int read()
{
	char ch=getchar(); int ne=0; while(!isdigit(ch)) {if(ch=='-') ne=1; ch=getchar();}
	int ans=0; while(isdigit(ch)) ans=ans*10+ch-'0',ch=getchar();
	if(ne) return -ans;
	else return ans;
}
void print(vector<int> v) {for(int i=1;i<(int)v.size();i++) printf("%d%c",v[i]," \n"[i==(int)v.size()-1]);}
#define mod 998244353
inline int add(int x,int y) {return x+y>=mod?x+y-mod:x+y;}
inline int sub(int x,int y) {return x-y<0?x-y+mod:x-y;}
inline int mul(int x,int y) {return 1LL*x*y%mod;}
inline int add(int x,int y,int z) {return add(add(x,y),z);}
inline int mul(int x,int y,int z) {return mul(mul(x,y),z);}
int qpow(int x,ll y)
{
	int ans=1;
	while(y)
	{
		if(y&1) ans=mul(ans,x);
		x=mul(x,x),y>>=1;
	}
	return ans;
}
int Inv(int x) {return qpow(x,mod-2);}
#define N 400005
vector<int> G[N];
int a[N],t[N],n,m,rt;
int inv[N];
int mn[N];
void init()
{
	for(int i=1;i<N;i++) inv[i]=Inv(i);
}
void dfs1(int u,int fa)
{
	mn[u]=a[u];
	for(int v:G[u])
	{
		if(v==fa) continue;
		dfs1(v,u),mn[u]=min(mn[u],mn[v]);
	}
}
int ans;
int cnt[N],tmp[N];
vector<int> dfs2(int u,int fa)
{
	vector<int> cnt(m+1);
	for(int v:G[u]) if(v!=fa) cnt[mn[v]]++;
	for(int i=1;i<=m;i++) cnt[i]+=cnt[i-1];
	vector<int> fu(m+1);
	for(int v:G[u])
	{
		if(v==fa) continue;
		vector<int> fv=dfs2(v,u);
		for(int i=a[u]+1;i<=m;i++) fv[i]=0;
		for(int i=1;i<=m;i++)
		{
			if(mn[v]<i) cnt[i-1]--;
			fv[i]=mul(fv[i],inv[cnt[i-1]+1]);
			if(mn[v]<i) cnt[i-1]++;
		}
		for(int i=1;i<=m;i++) fu[i]=add(fu[i],fv[i]);
	}
	for(int i=1;i<=a[u];i++) fu[i]=add(fu[i],1);
	for(int i=1;i<=m;i++) ans=add(ans,mul(fu[i],t[i]-t[i-1]));
//	printf("%d : ",u),print(fu);
	return fu;
}
void work()
{
	cin>>n>>rt; ans=0;
	for(int i=1;i<=n;i++) G[i].clear();
	for(int i=1;i<=n;i++) a[i]=t[i]=read();
	sort(t+1,t+n+1); m=unique(t+1,t+n+1)-t-1;
	for(int i=1;i<=n;i++) a[i]=lower_bound(t+1,t+m+1,a[i])-t;
	for(int i=1;i<n;i++)
	{
		int u=read(),v=read();
		G[u].pb(v),G[v].pb(u);
	}
	dfs1(rt,0);
//	for(int i=1;i<=n;i++) printf("%d%c",mn[i]," \n"[i==n]);
	dfs2(rt,0);
	cout<<ans<<endl;
}
signed main()
{
	freopen("dfs.in","r",stdin);
	freopen("dfs.ans","w",stdout);
	init();
	int T=read(); while(T--) work();
	return 0;
}

