import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.StringTokenizer;

public class TreesNQueries {
	static int maxLogn = 17;
	static List<Set<Integer>> tree;
	static int[][] parentArr;
	static int[] depth;
	
	public static void main(String[] args) {
		InputStream in = System.in;
		InputReader scan = new InputReader(in);
		int n = scan.nextInt();
		depth = new int[n+1];
		parentArr = new int[n+1][maxLogn+1];
		tree = new ArrayList<>();
		for(int i=0;i<=n;i++) {
			tree.add(new HashSet<>());
		}
		for(int i=1;i<n;i++) {
			int v1 = scan.nextInt();
			int v2 = scan.nextInt();
			tree.get(v1).add(v2);
			tree.get(v2).add(v1);
		}
		build(1,0);
		int query = scan.nextInt();
		for(int q=0;q<query;q++) {
			int x = scan.nextInt();
			int y = scan.nextInt();
			int a = scan.nextInt();
			int b = scan.nextInt();
			int k = scan.nextInt();
			int withoutNewPath = getDistance(a,b);
			int withNewPath = Math.min(getDistance(a, x)+getDistance(b, y), getDistance(a, y)+getDistance(x, b))+1;
			int ans = Integer.MAX_VALUE;
			if(withoutNewPath%2 == k%2) {
				ans = withoutNewPath;
			}
			if(withNewPath%2 == k%2) {
				ans = Math.min(ans, withNewPath);
			}
			if(ans<=k) {
				System.out.println("YES");
			} else {
				System.out.println("NO");
			}
		}
	}
	
	static int getDistance(int a,int b) {
		return depth[a] + depth[b] - (2*depth[getLca(a,b)]);
	}
	
	static int getLca(int a,int b) {
		int upper = a;
		int lower = b;
		if(depth[a]>depth[b]) {
			upper = b;
			lower = a;
		}
		for(int i=maxLogn;i>=0;--i) {
			if(depth[parentArr[lower][i]]>=depth[upper]) {
				lower = parentArr[lower][i];
			}
		}
		//Now both lower and upper are at same depth
		if(lower==upper) return lower;
		for(int i=maxLogn;i>=0;--i) {
			if(parentArr[upper][i]!=parentArr[lower][i]) {
				upper = parentArr[upper][i];
				lower = parentArr[lower][i];
			}
		}
		return parentArr[upper][0];
	}
	
	static void build(int current, int parent) {
		depth[current] = depth[parent] + 1;
		parentArr[current][0] = parent;
		for(int i=1;i<=maxLogn;i++) {
			parentArr[current][i] = parentArr[parentArr[current][i-1]][i-1];
		}
		for(int adj: tree.get(current)) {
			if(adj!=parent) {
				build(adj,current);
			}
		}
	}
	
	static class InputReader {
		BufferedReader br;
		StringTokenizer st;
		InputReader(InputStream in) {
			br = new BufferedReader(new InputStreamReader(in));
		}
		
		String next() {
			while(st==null || !st.hasMoreTokens()) {
				try {
					st = new StringTokenizer(br.readLine());
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
			}
			return st.nextToken();
		}
		
		int nextInt() {
			return Integer.parseInt(next());
		}
	}
}
