#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
struct node {
  int per, to;
} a[100010 << 1];
int head[100010], deep[100010], root[100010];
bool vis[100010], in[100010];
int f[100010][21];
int n, tot, aa, bb, xx, yy, k, q;
void addedge(int from, int to) {
  a[++tot].to = to;
  a[tot].per = head[from];
  head[from] = tot;
}
void dfs(int u, int fa) {
  if (fa == -1) {
    deep[u] = 0;
    f[u][0] = 0;
  } else {
    deep[u] = deep[fa] + 1;
    f[u][0] = fa;
  }
  for (int i = 1; i <= 20; ++i) {
    f[u][i] = f[f[u][i - 1]][i - 1];
  }
  for (int i = head[u]; i > 0; i = a[i].per) {
    int v = a[i].to;
    if (v == fa || vis[v]) continue;
    dfs(v, u);
  }
}
int lca(int x, int y) {
  if (deep[x] < deep[y]) swap(x, y);
  for (int i = 20; i >= 0; --i) {
    if (deep[f[x][i]] >= deep[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 main() {
  ios_base::sync_with_stdio(false);
  cin >> n;
  memset(head, -1, sizeof(head));
  for (int i = 1; i <= n - 1; ++i) {
    int u, v;
    cin >> u >> v;
    addedge(u, v);
    addedge(v, u);
    in[v] = 1;
  }
  int rt;
  for (int i = 1; i <= n; ++i) {
    if (!in[i]) {
      rt = i;
      break;
    }
  }
  dfs(rt, -1);
  cin >> q;
  while (q--) {
    cin >> xx >> yy >> aa >> bb >> k;
    int ff1 = lca(aa, bb), ff2 = lca(aa, xx), ff3 = lca(bb, yy),
        ff4 = lca(aa, yy), ff5 = lca(bb, xx);
    int dis1 = deep[bb] + deep[aa] - 2 * deep[ff1];
    int dis2 = deep[aa] + deep[xx] - 2 * deep[ff2] + deep[bb] + deep[yy] -
               2 * deep[ff3] + 1;
    int dis3 = deep[aa] + deep[yy] - 2 * deep[ff4] + deep[bb] + deep[xx] -
               2 * deep[ff5] + 1;
    if ((k >= dis1 && k % 2 == dis1 % 2) || (k >= dis2 && k % 2 == dis2 % 2) ||
        (k >= dis3 && k % 2 == dis3 % 2)) {
      cout << "YES\n";
    } else
      cout << "NO\n";
  }
  return 0;
}
