#include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; vector P(N-1); for(auto &p : P) cin >> p,p--; string s; cin >> s; s.insert(s.begin(),'.'); vector> Graph(N); for(int i=0; i diff(N); auto dfs = [&](auto dfs,int pos,int back) -> void { bool leaf = true; for(auto to : Graph.at(pos)){ if(to == back) continue; dfs(dfs,to,pos); leaf = false; if(s.at(pos) != s.at(to)) diff.at(pos)++; } if(leaf && s.at(pos) == '#') diff.at(pos)++; }; dfs(dfs,0,-1); for(auto &d : diff) d &= 1; Graph.assign(N,{}); int K; cin >> K; while(K--){ int u,v; cin >> u >> v; u--; v--; Graph.at(u).push_back(v); Graph.at(v).push_back(u); } vector already(N); bool yes = true; for(int i=0; i Q; Q.push(i); int sumd = 0; while(Q.size()){ int pos = Q.front(); Q.pop(); sumd += diff.at(pos); for(auto to : Graph.at(pos)) if(already.at(to) == false){ already.at(to) = true; Q.push(to); } } if(sumd%2) yes = false; } if(yes) cout << "Yes" << endl; else cout << "No" << endl; }