#include <bits/stdc++.h> using namespace std; /* ------------------------Input Checker---------------------------------- */ long long readInt(long long l,long long r,char endd){ long long x=0; int cnt=0; int fi=-1; bool is_neg=false; while(true){ char g=getchar(); if(g=='-'){ assert(fi==-1); is_neg=true; continue; } if('0'<=g && g<='9'){ x*=10; x+=g-'0'; if(cnt==0){ fi=g-'0'; } cnt++; assert(fi!=0 || cnt==1); assert(fi!=0 || is_neg==false); assert(!(cnt>19 || ( cnt==19 && fi>1) )); } else if(g==endd){ if(is_neg){ x= -x; } if(!(l <= x && x <= r)) { cerr << l << ' ' << r << ' ' << x << '\n'; assert(1 == 0); } return x; } else { assert(false); } } } string readString(int l,int r,char endd){ string ret=""; int cnt=0; while(true){ char g=getchar(); assert(g!=-1); if(g==endd){ break; } cnt++; ret+=g; } assert(l<=cnt && cnt<=r); return ret; } long long readIntSp(long long l,long long r){ return readInt(l,r,' '); } long long readIntLn(long long l,long long r){ return readInt(l,r,'\n'); } string readStringLn(int l,int r){ return readString(l,r,'\n'); } string readStringSp(int l,int r){ return readString(l,r,' '); } /* ------------------------Main code starts here---------------------------------- */ const int MAX_T = 1e5; const int MAX_N = 1e5; const int MAX_SUM_LEN = 1e5; #define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0) #define ff first #define ss second #define mp make_pair #define ll long long #define rep(i,n) for(int i=0;i<n;i++) #define rev(i,n) for(int i=n;i>=0;i--) #define rep_a(i,a,n) for(int i=a;i<n;i++) #define pb push_back int sum_n = 0, sum_m = 0; int max_n = 0, max_m = 0; int yess = 0; int nos = 0; int total_ops = 0; ll mod = 1000000007; using ii = pair<ll,ll>; vector<vector<int> > adj; string s; vector<vector<int> > bin, cnt; vector<int> st,lt; int tmr; void dfs(int c, int p){ st[c] = tmr++; bin[c][0] = p; rep_a(i,1,21){ bin[c][i] = bin[bin[c][i-1]][i-1]; } cnt[c]=cnt[p]; cnt[c][(int)(s[c-1]-'a')]++; for(auto h:adj[c]){ if(st[h]==-1) dfs(h,c); } lt[c] = tmr++; } bool is_anc(ll u, ll v){ if(st[u]<=st[v] && lt[u]>=lt[v]) return true; else return false; } ll get_anc(ll u, ll v){ if(is_anc(u,v)) return u; else if(is_anc(v,u)) return v; else{ rev(i,20){ if(!is_anc(bin[u][i],v)) u=bin[u][i]; } return bin[u][0]; } } void solve(){ int n = readIntLn(1,2e5); s = readStringLn(n,n); for(auto h:s) assert(h>='a' && h<='z'); adj.assign(n+1, vector<int>()); bin.assign(n+1, vector<int>(21)); cnt.assign(n+1, vector<int>(26,0)); st.assign(n+1, -1); lt.resize(n+1); tmr = 0; int x,y; rep(i,n-1){ x = readIntSp(1,n); y = readIntLn(1,n); adj[x].pb(y); adj[y].pb(x); } dfs(1,0); lt[0]=tmr; assert(tmr == 2*n); int q = readIntLn(1,2e5); sum_m+=q; rep(i,q){ x = readIntSp(1,n); y = readIntLn(1,n); //assert(x!=y); int f = 0; int anc = get_anc(x,y); rep(j,26){ if(cnt[x][j]-cnt[anc][j]>0 && cnt[y][j]-cnt[anc][j]>0){ f=1; } } if(f) yess++; else nos++; cout<<(f?"YES":"NO")<<'\n'; } } signed main() { #ifndef ONLINE_JUDGE freopen("input.txt", "r" , stdin); freopen("output.txt", "w" , stdout); #endif fast; int t = 1; t = readIntLn(1,2e5); for(int i=1;i<=t;i++) { solve(); } // assert(getchar() == -1); assert(sum_n<=2e5 and sum_m<=2e5); cerr<<"SUCCESS\n"; cerr<<"Tests : " << t << '\n'; cerr<<"Sum of lengths : " << sum_n <<" "<<sum_m<<'\n'; // cerr<<"Maximum length : " << max_n <<'\n'; // // cerr<<"Total operations : " << total_ops << '\n'; cerr<<"Answered yes : " << yess << '\n'; cerr<<"Answered no : " << nos << '\n'; cerr << "Time : " << 1000 * ((double)clock()) / (double)CLOCKS_PER_SEC << "ms\n"; }