#include <bits/stdc++.h>
#define ll long long int
#define ld long double
#define fio \
ios_base::sync_with_stdio(false); \
cin.tie(NULL)
using namespace std;
ll timer = 0;
vector<int> tin, tout;
vector<vector<int>> ancest, adj, cnt;
string s;
void dfs(int node, int p)
{
tin[node] = ++timer;
ancest[node][0] = p;
for (int i = 1; i <= 20; i++)
{
ancest[node][i] = ancest[ancest[node][i - 1]][i - 1];
if (ancest[node][i] == 0)
break;
}
cnt[node] = cnt[p];
++cnt[node][(int)(s[node - 1] - 'a')];
for (auto it : adj[node])
{
if (it == p)
continue;
dfs(it, node);
}
tout[node] = ++timer;
}
bool is_ancestor(ll u, ll v) // check if u ancestor of v
{
return (tin[u] <= tin[v] && tout[u] >= tout[v]);
}
int lca(ll u, ll v)
{
if (is_ancestor(u, v))
return u;
if (is_ancestor(v, u))
return v;
for (int i = 20; i >= 0; --i)
{
if (!is_ancestor(ancest[u][i], v))
u = ancest[u][i];
}
return ancest[u][0];
}
void mainSolve()
{
int n;
cin >> n >> s;
timer = 0;
adj.assign(n + 1, vector<int>());
cnt.assign(n + 1, vector<int>(26, 0));
ancest.assign(n + 1, vector<int>(21, 0));
tin.assign(n + 1, 0);
tout.assign(n + 1, 0);
for (int i = 1; i < n; i++)
{
ll a, b;
cin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
dfs(1, 0);
tout[0] = ++timer;
int q;
cin >> q;
while (q--)
{
int u, v;
cin >> u >> v;
int ances = lca(u, v);
bool poss = false;
for (int i = 0; i < 26; i++)
{
if (cnt[u][i] - cnt[ances][i] > 0 && cnt[v][i] - cnt[ances][i] > 0)
poss = true;
}
if (poss)
cout << "YES\n";
else
cout << "NO\n";
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
fio;
int t;
cin >> t;
while (t--)
{
mainSolve();
}
return 0;
}