#include<bits/stdc++.h>
#define int long long
#define MOD 998244353
#define MAXN 300001
typedef long long ll;
using namespace std;
vector<int> e[MAXN];
ll f[MAXN][21],g[MAXN][51],dep[MAXN];
ll qpow(ll a,ll b){
ll ans=1;
while(b){
if(b&1) ans=ll(ans*a)%MOD;
a=ll(a*a)%MOD;
b>>=1;
}
return ans;
}
void dfs(int x,int fa){
f[x][0]=fa;
dep[x]=dep[fa]+1;
for(int j=0;f[x][j];j++){
f[x][j+1]=f[f[x][j]][j];
}
for(int k=1;k<=50;k++){
g[x][k]=(g[fa][k]+qpow(dep[x],k))%MOD;
}
for(auto v:e[x]){
if(v!=fa){
dfs(v,x);
}
}
}
void addedge(int x,int y){
e[x].push_back(y);
e[y].push_back(x);
}
int lca(int x,int y){
if(dep[x]<dep[y]) swap(x,y);
for(int i=0,d=dep[x]-dep[y];i<=20;i++){
if(d&(1<<i)) x=f[x][i];
}
if(x==y) return x;
for(int i=20;i>=0;i--){
if(f[x][i]!=f[y][i]){
x=f[x][i],y=f[y][i];
}
}
return f[x][0];
}
signed main(){
int n,m;
scanf("%d",&n);
for(int i=1;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
addedge(x,y);
}
dfs(1,0);
scanf("%d",&m);
for(int i=1;i<=m;i++){
int x,y,k;
scanf("%d%d%d",&x,&y,&k);
int z=lca(x,y);
printf("%lld\n",((ll)g[x][k]-g[f[z][0]][k]+MOD+g[y][k]-g[z][k]+MOD)%MOD);
}
return 0;
}