#include <bits/stdc++.h>
using namespace std;
int n, q;
struct edge {
  int next, v;
} edges[100005 * 2];
int cnt;
int head[100005];
void init() {
  memset(head, -1, sizeof(head));
  cnt = 0;
}
void addedge(int u, int v) {
  edges[cnt].next = head[u];
  edges[cnt].v = v;
  head[u] = cnt++;
}
int dep[100005];
int f[100005][21];
void dfs(int u, int fa) {
  dep[u] = dep[fa] + 1;
  for (int i = 0; i <= 19; i++) f[u][i + 1] = f[f[u][i]][i];
  for (int i = head[u]; i != -1; i = edges[i].next) {
    int v = edges[i].v;
    if (v == fa) continue;
    f[v][0] = u;
    dfs(v, u);
  }
}
int lca(int x, int y) {
  if (dep[x] < dep[y]) swap(x, y);
  for (int i = 20; i >= 0; i--) {
    if (dep[f[x][i]] >= dep[y]) 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];
}
int dis(int a, int b) { return dep[a] + dep[b] - 2 * dep[lca(a, b)]; }
int main() {
  scanf("%d", &n);
  int x, y;
  init();
  for (int i = 1; i <= n - 1; i++) {
    scanf("%d%d", &x, &y);
    addedge(x, y);
    addedge(y, x);
  }
  dfs(1, 0);
  scanf("%d", &q);
  int aa, bb, a, b, k, res, ress, resss;
  while (q--) {
    scanf("%d%d%d%d%d", &aa, &bb, &a, &b, &k);
    res = dis(a, b);
    ress = dis(a, aa) + dis(b, bb) + 1;
    resss = dis(a, bb) + dis(b, aa) + 1;
    if (k >= res && (k - res) % 2 == 0) {
      printf("YES\n");
    } else if (k >= ress && (k - ress) % 2 == 0) {
      printf("YES\n");
    } else if (k >= resss && (k - resss) % 2 == 0) {
      printf("YES\n");
    } else {
      printf("NO\n");
    }
  }
  return 0;
}
