#include #include using namespace std; using int64 = long long; const int MAX_N = 100000; vector T[MAX_N]; int64 c[MAX_N], w[MAX_N]; int N; string S; int64 allc = 0, allw = 0; int64 dfs(int v, int par) { if (S[v] == 'c') c[v]++; else w[v]++; int64 ans = 0, add = 0; int64 cumc = 0, cumw = 0; for (int to : T[v]) { if (to == par) continue; ans += dfs(to, v); c[v] += c[to]; w[v] += w[to]; cumc += c[to]; cumw += w[to]; add -= c[to] * w[to]; } int64 upc = allc - c[v], upw = allw - w[v]; cumc += upc; cumw += upw; add -= upc * upw; add += cumc * cumw; if (S[v] != 'w') add = 0; ans += add; return ans; } int main() { cin >> N >> S; for (char ch : S) { if (ch == 'c') allc++; else allw++; } for (int i = 0; i < N - 1; i++) { int a, b; cin >> a >> b; a--; b--; T[a].push_back(b); T[b].push_back(a); } cout << dfs(0, -1) << endl; return 0; }