from sys import stdin
g = lambda : stdin.readline().strip()
gl = lambda : g().split()
gil = lambda : [int(var) for var in gl()]
gfl = lambda : [float(var) for var in gl()]
gcl = lambda : list(g())
gbs = lambda : [int(var) for var in g()]
mod = int(1e9)+7
inf = float("inf")
t = 1
for _ in range(t):
n, = gil()
adj = [[] for _ in range(n+1)]
clr = [-1]+[0]*(n)
got = g()
for i in range(n):
if got[i] == "B":
clr[i+1] = 1
isroot = [1]*(n+1)
isroot[0] = 0
for _ in range(n-1):
x, y = gil()
isroot[y] = 0
adj[x].append(y)
layers = [[isroot.index(1)]]
while 1:
temp = []
for x in layers[-1]:
for y in adj[x]:
temp.append(y)
if temp :
layers.append(temp)
else:
break
l, b = 0, clr.count(1)
for i in range(len(layers)):
if i&1:
l+=len(layers[i])
# print(l, n-l, b, n-b)
if max(n-l, l) == max(n-b, b):
currclr = 0 if l == b else 1
rclr = [0]*(n+1)
for l in layers :
for x in l :
rclr[x] = currclr
currclr ^= 1
# print(rclr)
reqTree, givenTree = [0]*(n+1), [0]*(n+1)
for l in reversed(layers):
for x in l :
for y in adj[x]:
# for given Tree
givenTree[x] += clr[y] + givenTree[y]
# for required Tree
reqTree[x] += rclr[y] + reqTree[y]
# print(reqTree, "req")
# print(givenTree, "given")
ans = 0
for x in range(1, n+1):
for y in adj[x]:
# x -- > y
blr, blg = rclr[y] + reqTree[y], clr[y] + givenTree[y]
ans += abs(blr-blg)
print(ans)
else:
print(-1)
ZnJvbSBzeXMgaW1wb3J0IHN0ZGluCmcgICA9IGxhbWJkYSA6IHN0ZGluLnJlYWRsaW5lKCkuc3RyaXAoKQpnbCAgPSBsYW1iZGEgOiBnKCkuc3BsaXQoKQpnaWwgPSBsYW1iZGEgOiBbaW50KHZhcikgZm9yIHZhciBpbiBnbCgpXQpnZmwgPSBsYW1iZGEgOiBbZmxvYXQodmFyKSBmb3IgdmFyIGluIGdsKCldCmdjbCA9IGxhbWJkYSA6IGxpc3QoZygpKQpnYnMgPSBsYW1iZGEgOiBbaW50KHZhcikgZm9yIHZhciBpbiBnKCldCm1vZCA9IGludCgxZTkpKzcKaW5mID0gZmxvYXQoImluZiIpCiAKdCA9IDEKZm9yIF8gaW4gcmFuZ2UodCk6CgluLCA9IGdpbCgpCglhZGogPSBbW10gZm9yIF8gaW4gcmFuZ2UobisxKV0KCWNsciA9IFstMV0rWzBdKihuKQoJZ290ID0gZygpCglmb3IgaSBpbiByYW5nZShuKToKCQlpZiBnb3RbaV0gPT0gIkIiOgoJCQljbHJbaSsxXSA9IDEKCglpc3Jvb3QgPSBbMV0qKG4rMSkKCWlzcm9vdFswXSA9IDAKCWZvciBfIGluIHJhbmdlKG4tMSk6CgkJeCwgeSA9IGdpbCgpCgkJaXNyb290W3ldID0gMAoJCWFkalt4XS5hcHBlbmQoeSkKCgoJbGF5ZXJzICA9IFtbaXNyb290LmluZGV4KDEpXV0KCgl3aGlsZSAxOgoJCXRlbXAgPSBbXQoJCWZvciB4IGluIGxheWVyc1stMV06CgkJCWZvciB5IGluIGFkalt4XToKCQkJCXRlbXAuYXBwZW5kKHkpCgkJaWYgdGVtcCA6CgkJCWxheWVycy5hcHBlbmQodGVtcCkKCQllbHNlOgoJCQlicmVhawoKCWwsIGIgPSAwLCBjbHIuY291bnQoMSkKCglmb3IgaSBpbiByYW5nZShsZW4obGF5ZXJzKSk6CgkJaWYgaSYxOgoJCQlsKz1sZW4obGF5ZXJzW2ldKQoKCSMgcHJpbnQobCwgbi1sLCBiLCBuLWIpCgoJaWYgbWF4KG4tbCwgbCkgPT0gbWF4KG4tYiwgYik6CgkJY3VycmNsciA9IDAgaWYgbCA9PSBiIGVsc2UgMQoJCXJjbHIgPSBbMF0qKG4rMSkKCQlmb3IgbCBpbiBsYXllcnMgOgoJCQlmb3IgeCBpbiBsIDoKCQkJCXJjbHJbeF0gPSBjdXJyY2xyCgkJCWN1cnJjbHIgXj0gMQoJCSMgcHJpbnQocmNscikKCgkJcmVxVHJlZSwgZ2l2ZW5UcmVlID0gWzBdKihuKzEpLCBbMF0qKG4rMSkKCgkJZm9yIGwgaW4gcmV2ZXJzZWQobGF5ZXJzKToKCQkJZm9yIHggaW4gbCA6CgkJCQlmb3IgeSBpbiBhZGpbeF06CgoJCQkJCSMgZm9yIGdpdmVuIFRyZWUKCQkJCQlnaXZlblRyZWVbeF0gKz0gY2xyW3ldICsgZ2l2ZW5UcmVlW3ldCgoJCQkJCSMgZm9yIHJlcXVpcmVkIFRyZWUgCgkJCQkJcmVxVHJlZVt4XSArPSByY2xyW3ldICsgcmVxVHJlZVt5XQoKCQkjIHByaW50KHJlcVRyZWUsICJyZXEiKQoJCSMgcHJpbnQoZ2l2ZW5UcmVlLCAiZ2l2ZW4iKQoKCQlhbnMgPSAwCgoJCWZvciB4IGluIHJhbmdlKDEsIG4rMSk6CgkJCWZvciB5IGluIGFkalt4XToKCQkJCSMgeCAtLSA+IHkKCQkJCWJsciwgYmxnID0gcmNsclt5XSArIHJlcVRyZWVbeV0sIGNsclt5XSArIGdpdmVuVHJlZVt5XQoJCQkJYW5zICs9IGFicyhibHItYmxnKQoKCQlwcmludChhbnMpCgoKCgoJZWxzZToKCQlwcmludCgtMSkKCgo=