#include<stdio.h>
#include<vector>
#include<iostream>

#define maxn 100005

using namespace std;

int n,sol;
int viz[maxn];
char sir[maxn];
vector<int>G[maxn];
const int base = 73,mods = 4;
int mod[mods] = {100003,100007,700001,700003},p[mods][maxn];

void dfs ( int nod , int niv , vector<int> &H1 , vector<int> &H2 ){
	viz[nod] = 1;
	
	int pal = 1;
	vector<int>newH1(5,0),newH2(5,0);
	for ( int i = 0 ; i < mods ; ++i ){
		newH1[i] = (H1[i] * base + sir[nod])%mod[i];
		newH2[i] = (H2[i] + 1LL*p[i][niv-1]*sir[nod])%mod[i];
		if ( newH1[i] != newH2[i] )	pal = 0;
	}
	
	if ( pal )	sol = max(sol,niv);
	
	for ( vector<int>::iterator itt = G[nod].begin() ; itt != G[nod].end() ; ++itt ){
		int fiu = (*itt);
		if ( !viz[fiu] ){
			dfs(fiu,niv+1,newH1,newH2);
		}
	}
}

int main () {
	
	#ifndef ONLINE_JUDGE
	freopen("a.in","r",stdin);
	freopen("a.out","w",stdout);
	#endif
	
	for ( int i = 0 ; i < mods ; ++i ){
		p[i][0] = 1;
	}
	for ( int i = 1 ; i <= 100000 ; ++i ){
		for ( int j = 0 ; j < mods ; ++j ){
			p[j][i] = (1LL*p[j][i-1]*base)%mod[j];
		}
	}
	
	int tests;
	cin >> tests;
	while ( tests-- ){
		
		cin >> n;
		cin >> (sir+1);
		
		int a,b;
		for ( int i = 1 ; i < n ; ++i ){
			cin >> a >> b;
			G[a].push_back(b);
			G[b].push_back(a);
		}
		
		sol = 0;
		vector<int>H1(5,0),H2(5,0);
		dfs(1,1,H1,H2);
		
		cout << sol << "\n";
		
		for ( int i = 1 ; i <= n ; ++i ){
			G[i].clear();
			viz[i] = 0;
		}
	}
	
	return 0;
}