#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; typedef pair P; struct LCA{ vector> g; vector d; vector> p; int log; int n; LCA(const vector> &g):n(g.size()), g(g), d(g.size()){ log=0; while(1<(n)); } void dfs(int x, int prev){ for(auto y:g[x]){ if(y==prev) continue; d[y]=d[x]+1; p[0][y]=x; dfs(y, x); } } void build(){ dfs(0, -1); for(int i=1; id[b]) swap(a, b); int dd=d[b]-d[a], i=0; int a1=a, b1=b; while(dd){ if(dd&1) b1=p[i][b1]; dd>>=1; i++; } if(a1==b1) return a1; for(int j=log-1; j>=0; j--){ if(p[j][a1]!=p[j][b1]){ a1=p[j][a1], b1=p[j][b1]; } } return p[0][a1]; } int la(int a, int k){ int ret=a; int i=0; while(k){ if(k&1) ret=p[i][ret]; i++; k>>=1; } return ret; } int myon(int x, int r){ return la(x, d[x]-d[r]-1); } int dist(int a, int b){ return d[a]+d[b]-2*d[lca(a, b)]; } }; int n; int a[100010]; vector> g; bool ok[100010]; int s[100010]; int main() { cin>>n; for(int i=0; i>a[i]; g.resize(n); for(int i=0; i>x>>y; x--; y--; g[x].push_back(y); g[y].push_back(x); } LCA lca(g); lca.build(); auto check=[&](int x, int y, int z){ if(a[x]!=a[z] && ((a[x]a[z]) || (a[x]>a[y] && a[y]void{ for(auto y:g[x]){ if(y==p) continue; s[y]=s[x]+ok[y]; dfs(dfs, y, x); } }; dfs(dfs, 0, -1); int q; cin>>q; for(int i=0; i>x>>y; x--; y--; int r=lca.lca(x, y); int d=lca.d[x]+lca.d[y]-2*lca.d[r]; if(d%2==0 || d==1){ cout<<"NO"<