#include using namespace std; vector adj[100005]; vector edge[100005]; long long int dp[100005][2]; int n,a,b; string s; long long int res = 0; void maketree(int now,int prev) { for(auto next : edge[now]) { if(next==prev) continue; adj[now].push_back(next); maketree(next,now); } } void dfs(int now) { if(s[now]=='c') dp[now][0] += 1; else dp[now][1] += 1; for(auto next : adj[now]) { dfs(next); dp[now][0] += dp[next][0]; dp[now][1] += dp[next][1]; } return; } void solve(int now,long long int C,long long int W) { if(s[now]=='w') { long long int sumW = W; for(auto next : adj[now]) { sumW += dp[next][1]; } res += (C*(sumW - W)); for(auto next : adj[now]) { res += (dp[next][0]*(sumW - dp[next][1])); } } for(auto next : adj[now]) { long long int c = dp[now][0]; long long int w = dp[now][1]; solve(next,C+c-dp[next][0],W+w-dp[next][1]); } } int main(void) { cin.tie(0); ios::sync_with_stdio(false); cin >> n; cin >> s; for(int i=1;i> a >> b; a-=1; b-=1; edge[a].push_back(b); edge[b].push_back(a); } maketree(0,-1); dfs(0); solve(0,0,0); cout << res << '\n'; return 0; }