#include<bits/stdc++.h>
using namespace std;
const int N=6e5;
const int mod=998244353;
int n,m,t,tot=0;
int f[N][20],d[N],ver[2*N],Next[2*N],head[N];
queue<int>q;
long long p(long long a,int b)
{
long long r=1;
a%=mod;
while(b)
{
if(b&1) r=r*a%mod;
a=a*a%mod;
b>>=1;
}
return r;
}
void add(int x,int y)
{
ver[++tot]=y;
Next[tot]=head[x];
head[x]=tot;
}
void bfs()
{
memset(d,-1,sizeof(d));
q.push(1);
d[1]=0;
while(!q.empty())
{
int x=q.front();
q.pop();
for(int i=head[x];i;i=Next[i])
{
int y=ver[i];
if(d[y]==-1)
{
d[y]=d[x]+1;
f[y][0]=x;
for(int j=1;j<=t;j++)
f[y][j]=f[f[y][j-1]][j-1];
q.push(y);
}
}
}
}
int lca(int x,int y)
{
if(d[x]>d[y]) swap(x,y);
for(int i=t;i>=0;i--)
{
if(d[f[y][i]]>=d[x])
y=f[y][i];
}
if(x==y) return x;
for(int i=t;i>=0;i--)
{
if(f[x][i]!=f[y][i])
x=f[x][i],y=f[y][i];
}
return f[x][0];
}
long long s(int x,int y,int k)
{
long long r=0;
while(1)
{
r=(r+p(d[x],k))%mod;
if(x==y) break;
x=f[x][0];
}
return r;
}
int sum(int x,int y,int k)
{
int a=lca(x,y);
long long sx=s(x,a,k),sy=s(y,a,k);
return (sx+sy-p(d[a],k)+mod)%mod;
}
int main()
{
cin>>n;
t=log2(n)+1;
memset(f,-1,sizeof(f));
for(int i=1;i<n;i++)
{
int x,y;
cin>>x>>y;
add(x,y);
add(y,x);
}
bfs();
cin>>m;
while(m--)
{
int a,b,k;
cin>>a>>b>>k;
cout<<sum(a,b,k)<<endl;
}
return 0;
}