#include <bits/stdc++.h>
using namespace std;
const int N=30,P=998244353;
int inv[N],to[N<<1],nx[N<<1],head[N],c,fa[N],n,w[N];
bool ck[N];
long long ans;
int pw(int a,int x)
{
	if(!x) return 1;
	long long s=pw(a,x>>1);
	s*=s;
	if(x&1) s=s%P*a;
	return s%P;
}
void add(int a,int b)
{
	to[++c]=b,nx[c]=head[a],head[a]=c;
}
void init(int x,int f)
{
	fa[x]=f;
	for(int i=head[x];i;i=nx[i])
	{
		int a=to[i];
		if(a==f) continue;
		init(a,x);
	}
}
void dfs(int S,int p)
{
	vector <int> tmp;
	for(int i=1;i<=n;i++)
	{
		if(ck[fa[i]]&&!ck[i]) tmp.push_back(i);
	}
	for(int i=0;i<tmp.size();i++)
	{
		int a=tmp[i];
		ans+=1ll*p*inv[tmp.size()]%P*min(S,w[a])%P;
		ck[a]=1;
		dfs(min(S,w[a]),1ll*p*inv[tmp.size()]%P);
		ck[a]=0;
	}
}
int main()
{
	freopen("dfs.in","r",stdin);
	freopen("dfs.out","w",stdout);
	for(int i=1;i<=10;i++)
	{
		inv[i]=pw(i,P-2);
	}
	int T;
	scanf("%d",&T);
	while(T--)
	{
		int root;
		scanf("%d%d",&n,&root);
		c=0;
		memset(head,0,sizeof(head));
		memset(ck,0,sizeof(ck));
		memset(w,0,sizeof(w));
		memset(fa,0,sizeof(fa));
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&w[i]);
		}
		for(int i=1;i<n;i++)
		{
			int a,b;
			scanf("%d%d",&a,&b);
			add(a,b);
			add(b,a);
		}
		init(root,0);
		ans=0;
		for(int i=1;i<=n;i++)
		{
			ck[i]=1;
			ans+=w[i];
			dfs(w[i],1);
			ck[i]=0;
		}
		printf("%lld\n",ans%P);
	}
}
