#include <bits/stdc++.h>
typedef long long ll;
const int N = 3e5 + 10;
const int mod = 998244353;
int dep[N], f[N][25];
ll val[52], s[N][52];
std::vector<int>e[N];
int n, m;
void dfs(int u) {
for(int i = 1; i <= 23; i++) {
f[u][i] = f[f[u][i - 1]][i - 1];
}
for(auto v : e[u]) {
if(v == f[u][0]) continue;
f[v][0] = u;
dep[v] = dep[u] + 1;
for(int i = 1; i <= 50; i++) val[i] = val[i - 1] * dep[v] % mod;
for(int i = 1; i <= 50; i++) s[v][i] = (val[i] + s[u][i]) % mod;
dfs(v);
}
}
int lca(int u, int v) {
if(dep[u] < dep[v]) std::swap(u, v);
int delta = dep[u] - dep[v];
for(int i = 0; i <= 23 && delta; i++, delta >>= 1) {
if(delta & 1) {
u = f[u][i];
}
}
if(u == v) return u;
for(int i = 23; i >= 0; i--){
if(f[u][i] != f[v][i]){
u = f[u][i];
v = f[v][i];
}
}
return f[u][0];
}
signed main() {
std::ios::sync_with_stdio(false);
std:: cin.tie(0);
std:: cout.tie(0);
std:: cin >> n;
for(int i = 1; i <= n - 1; i++) {
int u, v;
std:: cin >> u >> v;
e[u].push_back(v);
e[v].push_back(u);
}
std:: cin >> m;
val[0] = 1;
dfs(1);
while(m--) {
int u, v, k;
std:: cin >> u >> v >> k;
int LCA = lca(u, v);
std:: cout << (s[u][k] + s[v][k] - s[LCA][k] + s[f[LCA][0]][k] + 2 * mod ) % mod << '\n';
}
}