#include using namespace std; typedef signed long long ll; #define _P(...) (void)printf(__VA_ARGS__) #define FOR(x,to) for(x=0;x<(to);x++) #define FORR(x,arr) for(auto& x:arr) #define FORR2(x,y,arr) for(auto& [x,y]:arr) #define ALL(a) (a.begin()),(a.end()) #define ZERO(a) memset(a,0,sizeof(a)) #define MINUS(a) memset(a,0xff,sizeof(a)) template bool chmax(T &a, const T &b) { if(a bool chmin(T &a, const T &b) { if(a>b){a=b;return 1;}return 0;} //------------------------------------------------------- int N; vector E[202020]; string S; int P[200005],D[202020]; int L[202020],re[202020]; int id; int C[101010]; int dif[101010]; vector tar[101010]; int K; void dfs(int cur) { FORR(e,E[cur]) if(e!=P[cur]) D[e]=D[cur]+1, P[e]=cur, dfs(e); L[cur]=id++; re[L[cur]]=cur; } void solve() { int i,j,k,l,r,x,y; string s; cin>>N; for(i=1;i>x; E[x-1].push_back(i); } cin>>S; dfs(0); for(i=1;i>K; FOR(i,K) { cin>>x>>y; x--,y--; if(L[x]>L[y]) swap(x,y); tar[x].push_back(y); } FOR(i,N-1) { x=re[i]; vector> T; FORR(e,tar[x]) T.push_back({L[e],e}); sort(ALL(T)); T.erase(unique(ALL(T)),T.end()); if(T.size()>1) { FOR(j,T.size()-1) { tar[T[j].second].push_back(T[j+1].second); } } if(dif[x]!=C[x]) { if(T.empty()) { cout<<"No"<