from sys import stdin input = stdin.readline from random import randrange from heapq import heappush, heappop base1, base2 = 10**5*5, 5 def encode(d, n, c): return d*base1+n*base2+c base3 = 10**5 def decode(n): return n//base1, n//base2%base3, n%base2 N, M = map(int, input().split()) G = [[] for _ in range(N)] for _ in range(M): u, v, c = map(int, input().split()) u, v = u-1, v-1 G[u].append((v, c)) S = input().rstrip("\n") KCPC = "KCPC" INF = 1<<60 def func(color): c = 0 if KCPC[0] != "K" else 1 dist = [[INF]*5 for _ in range(N)] dist[0][0] = 0 visited = [[False]*5 for _ in range(N)] que = [encode(0, 0, 0)] while que: d, n, c = decode(heappop(que)) if visited[n][c]: continue visited[n][c] = True for next, weight in G[n]: nc = c+1 if c < 4 and KCPC[c] == S[next] and (S[next] != "C" or c//2 == color[next]) else c if dist[n][c]+weight < dist[next][nc]: dist[next][nc] = dist[n][c]+weight heappush(que, encode(dist[next][nc], next, nc)) return dist ans = INF for _ in range(20): dist = func([randrange(2) for _ in range(N)]) MIN = min(dist[i][-1] for i in range(N)) ans = min(ans, MIN) print(ans if ans != INF else -1)