#include<bits/stdc++.h>
using namespace std;typedef long long ll;const int N=4e5+10,mod=998244353;
int T,n,root,a[N],deg[N],ans,t[N],s[N],top,l[N],r[N];vector<int>e[N];
void dfs(int u,int fa){
	t[++t[0]]=a[u];for(int v:e[u])if(v^fa)dfs(v,u);
}
void get(){
	ans=0;scanf("%d%d",&n,&root);for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	for(int i=1,u,v;i<n;i++)scanf("%d%d",&u,&v),e[u].push_back(v),e[v].push_back(u),deg[u]++,deg[v]++;
	int mx=n;for(int i=1;i<n;i++)if(deg[i]>deg[mx])mx=i;if(deg[mx]==2){
		if(deg[root]==2){
			for(int v:e[root]){
				t[t[0]=1]=a[root];dfs(v,root);
				s[top=0]=0;for(int i=1;i<=t[0];i++){while(top&&t[s[top]]>=t[i])top--;l[i]=s[top];s[++top]=i;}
				s[top=0]=t[0]+1;for(int i=t[0];i>=1;i--){while(top&&t[s[top]]>t[i])top--;r[i]=s[top];s[++top]=i;}
				for(int i=1;i<=t[0];i++)(ans+=1ll*t[i]*(i-l[i])%mod*(r[i]-i)%mod)%=mod;
			}printf("%d\n",(ans-a[root]+mod)%mod);
		}else{
			for(int v:e[root]){
				t[t[0]=1]=a[root];dfs(v,root);
				s[top=0]=0;for(int i=1;i<=t[0];i++){while(top&&t[s[top]]>=t[i])top--;l[i]=s[top];s[++top]=i;}
				s[top=0]=t[0]+1;for(int i=t[0];i>=1;i--){while(top&&t[s[top]]>t[i])top--;r[i]=s[top];s[++top]=i;}
				for(int i=1;i<=t[0];i++)(ans+=1ll*t[i]*(i-l[i])%mod*(r[i]-i)%mod)%=mod;
			}printf("%d\n",ans);
		}
	}else puts("0");
	for(int i=1;i<=n;i++)e[i].clear();
}
int main(){
	freopen("dfs.in","r",stdin);freopen("dfs.out","w",stdout);
	for(scanf("%d",&T);T--;)get();return 0;
}
