#include <bits/stdc++.h>
using namespace std;
struct node{
char c;
int parent = -1;
vector <int> edges;
bool visited = false;
};
vector <node> tree;
char target[] = "tareq&shawon";
//char target[] = "taon";
bool found = false;
int firstIndex = -1;
void dfs(int index, int curIndex){
//printf("%c %d \n",tree[index].c, index+1);
if(tree[index].visited || found) return;
tree[index].visited = true;
if(target[curIndex] == tree[index].c){
if(target[curIndex] == 'n'){
found = true;
firstIndex = index;
//printf("%d -> %c\n",index, tree[index].c);
}
curIndex++;
}
for(int i=0;i<tree[index].edges.size();i++){
int tmp = tree[index].edges[i];
if(!tree[tmp].visited){
tree[tmp].parent = index;
dfs(tmp, curIndex);
}
if(found) return;
}
}
int main() {
// your code goes here
int t,i,j,n,m,k,u,v,e[100009][2],cn = 0;
char inp[10];
scanf("%d",&t);
while(t--){
found = false;
firstIndex = -1;
cn++;
tree.clear();
scanf("%d",&n);
for(i=0;i<n-1;i++){
scanf("%d %d",&e[i][0],&e[i][1]);
}
for(i=0;i<n;i++){
scanf("%s",inp);
node n1;
n1.c = inp[0];
tree.push_back(n1);
}
for(i=0;i<n-1; i++){
tree[e[i][0]-1].edges.push_back(e[i][1]-1);
tree[e[i][1]-1].edges.push_back(e[i][0]-1);
}
for(i=0;i<n;i++){
sort(tree[i].edges.begin(), tree[i].edges.end());
}
/* for(i=0;i<n;i++){
printf("%d %c --> ",i,tree[i].c);
for(auto it : tree[i].edges){
printf("%d ",it);
}
printf("\n");
}*/
dfs(0, 0);
//printf("%d -> %c\n",firstIndex+1, tree[firstIndex].c);
if(!found){
printf("Case %d: NO\n",cn);
continue;
}
int cur = firstIndex;
while(1){
bool s = false;
for(int p=0; p<tree[cur].edges.size();p++){
int tmp = tree[cur].edges[p];
if(tree[tmp].visited) continue;
s = true;
tree[tmp].visited = true;
tree[tmp].parent = cur;
cur = tmp;
continue;
}
if(!s) break;
}
//printf("%d -> %c\n",cur+1, tree[cur].c);
stack <int> ans;
while(tree[cur].parent != -1){
ans.push(cur);
cur = tree[cur].parent;
}
ans.push(cur);
printf("Case %d: YES\n",cn);
while(!ans.empty()){
int tmp = ans.top();
ans.pop();
printf("%d ",tmp+1);
}
printf("\n");
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCBub2RlewoJY2hhciBjOwoJaW50IHBhcmVudCA9IC0xOwoJdmVjdG9yIDxpbnQ+IGVkZ2VzOwoJYm9vbCB2aXNpdGVkID0gZmFsc2U7Cn07CnZlY3RvciA8bm9kZT4gdHJlZTsKY2hhciB0YXJnZXRbXSA9ICJ0YXJlcSZzaGF3b24iOwovL2NoYXIgdGFyZ2V0W10gPSAidGFvbiI7CmJvb2wgZm91bmQgPSBmYWxzZTsKaW50IGZpcnN0SW5kZXggPSAtMTsKdm9pZCBkZnMoaW50IGluZGV4LCBpbnQgY3VySW5kZXgpewoJLy9wcmludGYoIiVjICVkIFxuIix0cmVlW2luZGV4XS5jLCBpbmRleCsxKTsKCWlmKHRyZWVbaW5kZXhdLnZpc2l0ZWQgfHwgZm91bmQpCXJldHVybjsKCXRyZWVbaW5kZXhdLnZpc2l0ZWQgPSB0cnVlOwoJaWYodGFyZ2V0W2N1ckluZGV4XSA9PSB0cmVlW2luZGV4XS5jKXsKCQlpZih0YXJnZXRbY3VySW5kZXhdID09ICduJyl7CQoJCQlmb3VuZCA9IHRydWU7CgkJCWZpcnN0SW5kZXggPSBpbmRleDsKCQkJLy9wcmludGYoIiVkIC0+ICVjXG4iLGluZGV4LCB0cmVlW2luZGV4XS5jKTsKCQl9CgkJY3VySW5kZXgrKzsKCX0JCglmb3IoaW50IGk9MDtpPHRyZWVbaW5kZXhdLmVkZ2VzLnNpemUoKTtpKyspewoJCWludCB0bXAgPSB0cmVlW2luZGV4XS5lZGdlc1tpXTsKCQlpZighdHJlZVt0bXBdLnZpc2l0ZWQpewkKCQkJdHJlZVt0bXBdLnBhcmVudCA9IGluZGV4OwoJCQlkZnModG1wLCBjdXJJbmRleCk7CgkJfQoJCWlmKGZvdW5kKQlyZXR1cm47Cgl9Cn0KaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglpbnQgdCxpLGosbixtLGssdSx2LGVbMTAwMDA5XVsyXSxjbiA9IDA7CgljaGFyIGlucFsxMF07CglzY2FuZigiJWQiLCZ0KTsKCXdoaWxlKHQtLSl7CgkJZm91bmQgPSBmYWxzZTsKCQlmaXJzdEluZGV4ID0gLTE7CgkJY24rKzsKCQl0cmVlLmNsZWFyKCk7CgkJc2NhbmYoIiVkIiwmbik7CgkJZm9yKGk9MDtpPG4tMTtpKyspewoJCQlzY2FuZigiJWQgJWQiLCZlW2ldWzBdLCZlW2ldWzFdKTsKCQl9CgkJZm9yKGk9MDtpPG47aSsrKXsKCQkJc2NhbmYoIiVzIixpbnApOwoJCQlub2RlIG4xOwoJCQluMS5jID0gaW5wWzBdOwoJCQl0cmVlLnB1c2hfYmFjayhuMSk7CgkJfQoJCWZvcihpPTA7aTxuLTE7IGkrKyl7CgkJCXRyZWVbZVtpXVswXS0xXS5lZGdlcy5wdXNoX2JhY2soZVtpXVsxXS0xKTsKCQkJdHJlZVtlW2ldWzFdLTFdLmVkZ2VzLnB1c2hfYmFjayhlW2ldWzBdLTEpOwoJCX0KCQlmb3IoaT0wO2k8bjtpKyspewoJCQlzb3J0KHRyZWVbaV0uZWRnZXMuYmVnaW4oKSwgdHJlZVtpXS5lZGdlcy5lbmQoKSk7CgkJfQoJLyoJZm9yKGk9MDtpPG47aSsrKXsKCQkJcHJpbnRmKCIlZCAlYyAtLT4gIixpLHRyZWVbaV0uYyk7CgkJCWZvcihhdXRvIGl0IDogdHJlZVtpXS5lZGdlcyl7CgkJCQlwcmludGYoIiVkICIsaXQpOwoJCQl9CgkJCXByaW50ZigiXG4iKTsKCQl9Ki8KCQlkZnMoMCwgMCk7CgkJLy9wcmludGYoIiVkIC0+ICVjXG4iLGZpcnN0SW5kZXgrMSwgdHJlZVtmaXJzdEluZGV4XS5jKTsKCQlpZighZm91bmQpewoJCQlwcmludGYoIkNhc2UgJWQ6IE5PXG4iLGNuKTsKCQkJY29udGludWU7CgkJfQoJCWludCBjdXIgPSBmaXJzdEluZGV4OwoJCXdoaWxlKDEpewoJCQlib29sIHMgPSBmYWxzZTsKCQkJZm9yKGludCBwPTA7IHA8dHJlZVtjdXJdLmVkZ2VzLnNpemUoKTtwKyspewoJCQkJaW50IHRtcCA9IHRyZWVbY3VyXS5lZGdlc1twXTsKCQkJCWlmKHRyZWVbdG1wXS52aXNpdGVkKQljb250aW51ZTsKCQkJCXMgPSB0cnVlOwoJCQkJdHJlZVt0bXBdLnZpc2l0ZWQgPSB0cnVlOwoJCQkJdHJlZVt0bXBdLnBhcmVudCA9IGN1cjsKCQkJCWN1ciA9IHRtcDsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCWlmKCFzKQlicmVhazsKCQl9CgkJLy9wcmludGYoIiVkIC0+ICVjXG4iLGN1cisxLCB0cmVlW2N1cl0uYyk7CgkJc3RhY2sgPGludD4gYW5zOwoJCXdoaWxlKHRyZWVbY3VyXS5wYXJlbnQgIT0gLTEpewoJCQlhbnMucHVzaChjdXIpOwoJCQljdXIgPSB0cmVlW2N1cl0ucGFyZW50OwoJCX0KCQlhbnMucHVzaChjdXIpOwoJCXByaW50ZigiQ2FzZSAlZDogWUVTXG4iLGNuKTsKCQl3aGlsZSghYW5zLmVtcHR5KCkpewoJCQlpbnQgdG1wID0gYW5zLnRvcCgpOwoJCQlhbnMucG9wKCk7CgkJCXByaW50ZigiJWQgIix0bXArMSk7CgkJfQoJCXByaW50ZigiXG4iKTsKCX0KCXJldHVybiAwOwp9Cg==