#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

#define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); cerr << '\n'; }
void err(istream_iterator<string> it) {}
template<typename T, typename... Args> void err(istream_iterator<string> it, T a, Args... args) { cerr << *it << " = " << a << " "; err(++it, args...); }

#define        optimize           ios::sync_with_stdio(0); cin.tie(0);
#define PI    acos(-1.0)
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define RESET(a, b) memset(a, b, sizeof(a))
#define pii pair <int, int>
#define min3(a, b, c) min(c, min(a, b))
#define max3(a, b, c) max(c, max(a, b))

const ll MX = 2e5 + 105;

vector <int> adj[4005];
int black[4005];
int white[4005];
string str;

void dfs(int u, int par)
{
    for(auto v: adj[u]){
        if(v == par) continue;
        dfs(v, u);
        white[u] += white[v];
        black[u] += black[v];
    }
    if(str[u-1] == 'W') white[u]++;
    else black[u]++;
}

void solve()
{
    int n;
    cin>>n;

    for(int i = 2; i <= n; i++){
        int par;
        cin>>par;
        adj[par].push_back(i);
        adj[i].push_back(par);
    }
    cin>>str;

    dfs(1, 1);

    int ans = 0;
    for(int i = 1; i <= n; i++){
        if(white[i] == black[i]) ans++;
//        error(i, white[i], black[i]);
    }
    cout<<ans<<endl;

    for(int i = 1; i <= n; i++){
        adj[i].clear();
        white[i] = 0;
        black[i] = 0;
    }
}

int main()
{
    int t;
    cin>>t;
    while(t--){
        solve();
    }
}
