#include<bits/stdc++.h>
using namespace std;
const int maxn=2*300005;
const int mod=998244353;
struct node{
int u,v,nxt;
}edge[maxn];
int head[maxn],tot,n,m,fa[maxn][50],depth[maxn],s,pre[maxn][60];
void add(int u,int v){
edge[++tot].u=u;
edge[tot].v=v;
edge[tot].nxt=head[u];
head[u]=tot;
}
int qp(int a,int b){
if(b==0)return 1;
if(b==1)return a;
if(b%2==0)return qp(a,b/2)*qp(a,b/2)%mod;
if(b%2!=0)return a*qp(a,b-1)%mod;
}
void dfs(int x,int fat){
depth[x]=depth[fat]+1;
fa[x][0]=fat;
for(int i=1;i<=50;i++)
pre[x][i]=pre[fat][i]+qp(depth[x],i);
for(int i=1;(1<<i)<=depth[x];i++)
fa[x][i]=fa[fa[x][i-1]][i-1];
for(int i=head[x];i;i=edge[i].nxt){
int v=edge[i].v;
if(v!=fat){
dfs(v,x);
}
}
}
int lca(int x,int y){
if(depth[x]>depth[y])
swap(x,y);
for(int i=20;i>=0;i--){
if(depth[x]<=depth[y]-(1<<i)){
y=fa[y][i];
}
}
if(x==y) return x;
for(int i=20;i>=0;i--){
if(fa[x][i]==fa[y][i])
continue;
else
x=fa[x][i],y=fa[y][i];
}
return fa[x][0];
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
{
int u,v;
cin>>u>>v;
add(u,v);
}
dfs(1,0);
cin>>m;
for(int i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
int father=lca(x,y);
int sum1=(pre[x][z]+pre[y][z])%mod;
int sum2=(pre[father][z]+pre[fa[father][0]][z])%mod;
cout<<(sum1-sum2)%mod<<endl;
}
return 0;
}