#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; }