#include <cstdio>
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <string>
#include <ctime>
#include <cassert>
#include <utility>

using namespace std;

#define MAXN 100050
#define HBASE 666013

int T, N, a, b;
char S[MAXN];
vector<int> A[MAXN];
unsigned long long P[MAXN];
int ans;

void dfs(int node, int prev, int lvl, unsigned long long h, unsigned long long rh) {
    if(h == rh)
        ans = max(ans, lvl);
    for(vector<int> :: iterator it = A[node].begin(); it != A[node].end(); it++)
        if(*it != prev) {
            int c = S[*it] - 'a';
            unsigned long long nh = h * HBASE + c;
            unsigned long long nrh = rh + P[lvl] * c;
            dfs(*it, node, lvl + 1, nh, nrh);
        }
}

int main() {
//	freopen("date.in", "r", stdin);
//	freopen("date.out","w", stdout);
	
	P[0] = 1;
	for(int i = 1; i < MAXN; i++)
        P[i] = P[i - 1] * HBASE;
	
	scanf("%d", &T);
	while(T--) {
        scanf("%d\n", &N);
        fgets(S, sizeof(S), stdin);
        
        for(int i = 0; i <= N; i++)
            A[i].clear();
        for(int i = 0; i < N - 1; i++) {
            scanf("%d %d", &a, &b);
            a--; b--;
            A[a].push_back(b);
            A[b].push_back(a);
        }
        
        ans = 0;
        dfs(0, -1, 1, S[0] - 'a', S[0] - 'a');
        
        printf("%d\n", ans);
	}
	
	return 0;
}