#include<bits/stdc++.h>
#define int long long
#define N 800005
#define M 800005
#define pii pair<int,int>
#define x first
#define y second
#define mod 1000000007
using namespace std;
int T=1,n,h[N],e[M],ne[M],deg[N],idx;
char s[N];
vector<int>son;
void add(int a,int b){
e[idx]=b;ne[idx]=h[a];h[a]=idx++;deg[b]++;
}
void dfs(int u,int fa){
if(u!=1&°[u]==1)son.push_back(u);
for(int i=h[u];~i;i=ne[i]){
int j=e[i];
if(j==fa)continue;
dfs(j,u);
}
}
void solve(int cs){
cin>>n;
idx=0;
son.clear();
for(int i=1;i<=n;i++){
h[i]=-1;
deg[i]=0;
}
int now=0;
for(int i=1;i<n;i++){
int a,b;
cin>>a>>b;
if(a==1||b==1)now++;
add(a,b);add(b,a);
}
int tot=0;
cin>>s+1;
for(int i=1;i<=n;i++){
if(s[i]=='?')tot++;
}
dfs(1,0);
if(s[1]=='?'){
int sum0=0,sum1=0,que=0;
for(auto it:son){
if(s[it]=='0')sum0++;
if(s[it]=='1')sum1++;
if(s[it]=='?')que++;
}
if(sum0==sum1){
if(tot==que+1){
cout<<sum0+que/2<<'\n';
}
else{
cout<<sum0+(que+1)/2<<'\n';
}
}
else{
cout<<max(sum0,sum1)+que/2<<'\n';
}
}
else{
int cnt=0,sum=0;
for(auto it:son){
if(s[it]!='?'&&s[it]!=s[1]){
cnt++;
}
if(s[it]=='?')sum++;
}
cout<<cnt+(sum+1)/2<<'\n';
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>T;
for(int cs=1;cs<=T;cs++){
solve(cs);
}
return 0;
}
wa on 2