#include <bits/stdc++.h>
using namespace std;
int n, x, y, q, a, b, k, in[100009], out[100009], parent[100009][19], timer,
    H[100009];
vector<int> v[100009];
void go(int x) {
  timer++;
  in[x] = timer;
  for (int i = 2; i <= 17; i++) {
    parent[x][i] = parent[parent[x][i - 1]][i - 1];
  }
  for (int i = 0; i < v[x].size(); i++) {
    if (v[x][i] != parent[x][1]) {
      parent[v[x][i]][1] = x;
      go(v[x][i]);
    }
  }
  timer++;
  out[x] = timer;
}
bool check(int a, int b) { return (in[a] <= in[b] && out[b] <= out[a]); }
int lca(int a, int b) {
  if (check(a, b)) return a;
  if (check(b, a)) return b;
  for (int i = 17; i >= 1; i--) {
    if (!check(parent[a][i], b)) a = parent[a][i];
  }
  return parent[a][1];
}
void High(int x, int h) {
  H[x] = h;
  for (int i = 0; i < v[x].size(); i++) {
    if (H[v[x][i]] == 0) High(v[x][i], h + 1);
  }
}
bool find(int a, int b, int k) {
  int p = lca(a, b);
  int depth = H[a] + H[b] - 2 * H[p];
  if (k % 2 == depth % 2 && k >= depth)
    return true;
  else
    return false;
}
int main() {
  ios::sync_with_stdio(0);
  cin >> n;
  for (int i = 1; i < n; i++) {
    cin >> x >> y;
    v[x].push_back(y);
    v[y].push_back(x);
  }
  in[0] = 0;
  out[0] = 3 * n;
  go(1);
  High(1, 1);
  cin >> q;
  while (q--) {
    cin >> x >> y >> a >> b >> k;
    if (find(a, b, k)) {
      cout << "YES" << endl;
      continue;
    }
    int p = lca(a, x);
    int depth = H[a] + H[x] - 2 * H[p];
    depth++;
    if (depth <= k) {
      if (find(y, b, k - depth)) {
        cout << "YES" << endl;
        continue;
      }
    }
    p = lca(a, y);
    depth = H[a] + H[y] - 2 * H[p];
    depth++;
    if (depth <= k) {
      if (find(x, b, k - depth)) {
        cout << "YES" << endl;
        continue;
      }
    }
    cout << "NO" << endl;
  }
  return 0;
}
