/*
由于可以在一条边上反复横跳,所以只要考虑奇偶性和k够不够大的问题
a->b只有两种策略可以走:
直接走lca或者经过边(a,b),第二种只要让x->a,y->b或(x->b,y->a),然后再+1就是最短路径长度
*/
#include<bits/stdc++.h>
#include<vector>
using namespace std;
#define N 200005
vector<int>G[N];
int n;
int f[N],size[N],son[N],top[N],d[N];
void dfs1(int u,int pre,int deep){
f[u]=pre;d[u]=deep;size[u]=1;
for(auto v:G[u]){
if(v==pre)continue;
dfs1(v,u,deep+1);
size[u]+=size[v];
if(size[son[u]]<size[v])son[u]=v;
}
}
void dfs2(int u,int tp){
top[u]=tp;
if(son[u])dfs2(son[u],tp);
for(auto v:G[u]){
if(v==son[u] || v==f[u])continue;
dfs2(v,v);
}
}
int LCA(int u,int v){
while(top[u]!=top[v]){
if(d[top[u]]<d[top[v]])swap(u,v);
u=f[top[u]];
}
if(d[u]>d[v])swap(u,v);
return u;
}
int main(){
cin>>n;
for(int i=1;i<n;i++){
int u,v;scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}
dfs1(1,0,0);dfs2(1,1);
int q;cin>>q;
while(q--){
int x,y,a,b,k;
cin>>x>>y>>a>>b>>k;
//a->b直接走lca那条路
int lca1=LCA(a,b);
int dis1=d[a]+d[b]-2*d[lca1];
if(k>=dis1 && (k-dis1)%2==0){
puts("YES");continue;
}
//a->b走(x,y)
int lca2=LCA(a,x),lca3=LCA(b,y);
int lca4=LCA(a,y),lca5=LCA(b,x);
int dis2=d[a]+d[x]-2*d[lca2];
dis2+=d[b]+d[y]-2*d[lca3]+1;
int dis3=d[a]+d[y]-2*d[lca4];
dis3+=d[b]+d[x]-2*d[lca5]+1;
if(k>=dis2 && (k-dis2)%2==0){
puts("YES");continue;
}
if(k>=dis3 && (k-dis3)%2==0){
puts("YES");continue;
}
puts("NO");
}
}