import std.stdio; import std.array; import std.string; import std.conv; import std.algorithm; import std.typecons; import std.range; string S; int[][] rinsetsu; long dfs(char c, int n, int prev) { long ret = 0; foreach (nn; rinsetsu[n]) if (nn != prev) ret += dfs(c, nn, n); return S[n] == c ? ret+1 : ret; } void main() { int N = readln().chomp.to!int; S = readln().chomp; rinsetsu = new int[][](N); foreach (i; iota(N-1)) { auto input = readln().split.map!(to!int); rinsetsu[input[0]-1] ~= input[1]-1; rinsetsu[input[1]-1] ~= input[0]-1; } long ans = 0; foreach (root; iota(N)) { if (S[root] != 'w') continue; int len = rinsetsu[root].length.to!int; long[] c = new long[](len); long[] w = new long[](len); foreach (i; iota(len)) { c[i] = dfs('c', rinsetsu[root][i], root); w[i] = dfs('w', rinsetsu[root][i], root); } foreach (i; iota(len)) foreach (j; iota(i+1, len)) ans += c[i]*w[j] + c[j]*w[i]; } writeln(ans); }