#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef vector VI; typedef pair PII; #define REP(i,s,t) for(int i=(s);i<(t);i++) #define FILL(x,v) memset(x,v,sizeof(x)) #define MAXN 2505 VI adj[MAXN]; int ch[MAXN]; vector child; void dfs(int x, int p, int t) { int c = ch[x]; if (child[t][c] == -1) { child[t][c] = child.size(); child.push_back(VI(16, -1)); } for (int y : adj[x]) { if (y == p) continue; dfs(y, x, child[t][c]); } } int main() { int n; string hex; cin >> n >> hex; REP(i,0,n) ch[i] = (hex[i] >= '0' && hex[i] <= '9') ? (hex[i] - '0') : (hex[i] - 'a' + 10); REP(i,0,n-1) { int x, y; cin >> x >> y; x--; y--; adj[x].push_back(y); adj[y].push_back(x); } child.push_back(VI(16, -1)); REP(i,0,n) dfs(i, -1, 0); cout << (int)child.size() - 1 << endl; return 0; }