#include #include #include #include #include using namespace std; using mint=atcoder::modint998244353; int N; mint Asum; int A[1<<17],B[1<<17],C[1<<17],P[1<<17]; vectorG[1<<17]; mint ans; mint dfs(int u,int p) { {//u to u //sum[k=1..A[u]-1] k*(A[u]-k) ans+=mint(A[u])*A[u]*(A[u]-1)/2; ans-=mint(A[u])*(A[u]-1)*(2*A[u]-1)/6; } mint ch=A[u]; vectorV; for(int v:G[u]) { mint t=dfs(v,u); V.push_back(t); ch+=t; {//u to v mint p=C[v]; mint c=p*(p+1)/2+(A[u]-p-1)*(A[u]-p)/2; ans+=c*t; } {//u or pr to v or ch ans+=(Asum-t)*t; } } vector >VP; for(int i=0;il,pairr){return l.first>N; for(int i=0;i>A[i],Asum+=A[i]; for(int i=1;i>B[i],B[i]--; for(int i=1;i>C[i],C[i]--; for(int i=1;i>P[i],P[i]--; for(int i=1;i