#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
const int N=400010,mod=998244353;
int ksm(int a,int b=mod-2)
{
	int r=1;
	for(;b;b>>=r,r=1ll*r*a%mod) if(b&1) r=1ll*r*a%mod;
	return r;
}
int a[N],b[N],iv[N],n,m,root;
void add(int &x,int y){x=(x+y>=mod?x+y-mod:x+y);}
void init(int n=N-10)
{
	iv[1]=1;
	for(int i=2;i<=n;i++) iv[i]=1ll*(mod-mod/i)*iv[mod%i]%mod;
}
vector<int>g[N];
int ans[N];
namespace brute{
	int mn[N];
	void dfs(int u,int p)
	{
		mn[u]=a[u];
		for(int v:g[u]) if(v!=p) dfs(v,u),mn[u]=min(mn[u],mn[v]);
	}
	map<int,int> f[N];
	void dfs2(int u,int p)
	{
		vector<pair<int,int>>d;
		for(int v:g[u]) if(v!=p) dfs2(v,u),d.push_back({mn[v],v});
		sort(d.begin(),d.end());
		f[u][a[u]]=1;
		for(int v:g[u]) if(v!=p)
		{
			for(auto w:f[v])
			{
				int e=w.second,h=min(w.first,a[u]),c=1;
				for(int i=0;i<d.size();i++) if(d[i].second!=v)
				{
					int qw=1ll*iv[c]*iv[c+1]%mod;
					if(d[i].first<h) add(f[u][d[i].first],1ll*e*qw%mod);
					else break;
					++c;
				}
				add(f[u][h],1ll*e*iv[c]%mod);
			}
		}
		for(auto w:f[u]) add(ans[w.first],w.second);
	}
	void solve()
	{
		dfs(root,0);
		dfs2(root,0);
		for(int i=1;i<=m;i++) mn[i]=0;
		for(int i=1;i<=n;i++) f[i].clear(),g[i].clear();
	}
}
int main()
{
	freopen("dfs.in","r",stdin);
	freopen("dfs.out","w",stdout);
	init();
	int T;scanf("%d",&T);
	while(T --> 0)
	{
		scanf("%d%d",&n,&root);
		for(int i=1;i<=n;i++) ans[i]=0;
		for(int i=1;i<=n;i++) scanf("%d",&a[i]),b[i]=a[i];
		sort(b+1,b+n+1);
		m=unique(b+1,b+n+1)-b-1;
		for(int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+m+1,a[i])-b;
		for(int i=1,u,v;i<n;i++) scanf("%d%d",&u,&v),g[u].push_back(v),g[v].push_back(u);
		if(n<=5000) brute::solve();
		else if(g[root].size()==n-1)
		{
			static int tmp[N];int tt=0;
			for(int i=1;i<=n;i++){if(i!=root) tmp[++tt]=min(a[i],a[1]);ans[a[i]]++;}
			sort(tmp+1,tmp+tt+1);
			for(int i=1;i<=tt;i++)
				add(ans[tmp[i]],(iv[i]+1ll*(tt-i)*iv[i]%mod*iv[i+1]%mod)%mod);
		}
		else brute::solve();
		int res=0;
		for(int i=1;i<=m;i++) add(res,1ll*ans[i]*b[i]%mod);
		printf("%d\n",res);
	}
	return 0;
}
