#include "bits/stdc++.h" using namespace std; #define FOR(i,j,k) for(int (i)=(j);(i)<(int)(k);++(i)) #define rep(i,j) FOR(i,0,j) #define each(x,y) for(auto &(x):(y)) #define mp make_pair #define all(x) (x).begin(),(x).end() #define debug(x) cout<<#x<<": "<<(x)< pii; typedef vector vi; typedef vector vll; int N; char S[100010]; vi G[100010], vertices; ll dp[100010][4], ans = 0; void dfs(int u, int pre) { vertices.push_back(u); each(v, G[u])if(v != pre) { dfs(v, u); } } int main(){ cin >> N; scanf("%s", S); rep(i, N - 1) { int a, b; scanf("%d%d", &a, &b); --a; --b; G[a].push_back(b); G[b].push_back(a); } rep(i, N)if(sz(G[i]) == 1) { dfs(i, -1); break; } rep(ITER, 2) { MEM(dp, 0); dp[0][0] = 1; rep(i, N)rep(j, 3) { int v = vertices[i]; ll val = dp[i][j]; if(S[v] == 'c' && j == 0)dp[i + 1][1] += val; if(S[v] == 'w' && j == 1 || j == 2)dp[i + 1][j + 1] += val; dp[i + 1][j] += dp[i][j]; } ans += dp[N][3]; reverse(all(vertices)); } cout << ans << endl; }