//package com.daimens.algorithm.june;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

/**
 * 
 * @author DemonSong
 * 
 *         2220.Mr.Rito Post Office
 * 
 *         Problem D: Mr. Rito Post Office
 *         ??????????????¢??¶??????????±?????????????????????°????????§?????????????????????????????§????????°??????????????°?????¶???????????????????????¶??????????????\???????????????????????????????????????????????????????????????????????????????????????????????¶????????\?????¶???????????????????????????????????????????????°??????????????????????????¶???????????????????????????????????????????????????????????¨???????????????????????¨????????????
 * 
 *         ?????´???????????????????±?????°???¶???????????£??????????????????????????????????????????????????????????????´????????¨??????????????????????????¢??¶??????????±??????????????????§????????????????????¨??????????????????????????????????????????????????¨?????£???????????£???????????????????±???????????????????????????°??????????????????????????????????????§????????????????????§??????????\???§?????????????????§??????????????????????????°????????????????????????????????????????????????????????????????????????????±????????????????
 * 
 *         ??????????????????????????????????????????????????????????????????????????????????????????????????¨???????????????????????????????±???????????????°????????????????????¨??§?????????
 * 
 *         ???????????????????±??????????????????????????????\?????§???????\??????????????????¨?????§???????????????????????????????????????????????\????????????????§??????????????????????????????????????????±???????§???????????????¨????¨±???????????????????????????????????????????????¶?????????????????????????????????????????£????????????
 * 
 *         ????????°??????A??????B??????C??¨??????????????????????????????????????´?????????A?????????B?????????????????????????????????????????±???????????????????????????????????¨?????????C????????±??????????§?????????????????????????????????????????????????????????????B????????£???????????????????????£????????????????????????C????¨???????????????????????????????????????°???????????????????????????A?????????????????¨?????????B??????????????????B?????????????????¨?????????C???????????£?????´???????????????B?????????????????????????????????????????£???????¬???????????????????????????´?????????B???????????????????????????
 * 
 *         ???????????????????????????????????°??????????????????????????°??????????????´????????????????????¨?????°??????A??????B??????C??????B??¨?????????????????????????????????????????????????????????????????¨?????????A?????????B?????????????????????C???????????£?????´????????????C??§??????????????????????????????????????¨?????§????????????????????????B??§????????????????????£????????????????????§????????????C??§??????????????????????????§???B????¨????????????????????????????????????????B????????????????????????????????¨?????????????????????
 * 
 *         ????????????????????????????????????????????????????????¨??¨????????????????????????????????????????????§????????????????§????????????\????????????????\??????????????????????????????????????????????????????????????????????????????§??????????\????????????????????????§??????????????????????????§????????????????????¨????????????????????????????±??????°????????§???????????????????????????????????????
 * 
 *         Input ??\???????????°????????????????????????????§??????????????????????????????????????????¢???????¬????????????¨????????§?????????
 * 
 *         N M x1 y1 t1 sl1 x2 y2 t2 sl2 ... xM yM tM slM R z1 z2 ... zR
 *         ?????????????????????????????\???????????????????????????????????´??°??§????????????????????\?????????????????????????????? 1 ?????§?????????
 * 
 *         ?????????????????????????????????????¶??????§????????????????????????
 * 
 *         N (2 ??? N ??? 200) ??????????????????????????°??§????????? ???????????????????????????????????????1 ?????? N ?????§??????????????????????????????????????? M
 *         (1 ??? M ??? 10000) ??????????????¨?????????????¨???¬??°??§?????????
 * 
 *         2 ???????????? 1 + M ?????????????????????????????????????¨???°??§????????? xi ??¨ yi (1 ??? xi, yi ??? N)
 *         ?????????????????????????????????????????¨?????? ti (1 ??? ti ??? 1000) ??????????????????????????????????§???????????????¨?????? sli ??? ???L??? ?????????
 *         ???S??? ?????????????????§?????????L???????????????S??????????????????????????¨??????
 * 
 *         ??????2????????????????????´??\?????¶????????????????????????2??¬??\????????¨???????????¨????????????
 *         ??????????????????????????????????????????????????§??????????????????????????????????????????????§??????§?????????
 * 
 *         M + 2 ????????? R (1 ??? R ??? 1000)???????????????????????????????????????????????°?????¨?????? M + 3 ?????????????????????????????????????????????
 *         zi (1 ??? zi ??? N) ??????????????? R ???????????§?????????
 * 
 *         ????????¶?????§?????????????????¨????????¨???????????? z1 ????????¨????????? ????????¶?????????????????????????????????????????????????????????????????§?§???????????????¨?????§?????????
 * 
 *         ??\?????????????????????????????§???????????????2??????0?????????1?????§???????????????
 * 
 *         Output ??\???????????????????????????????????????????????????????????????????????§????????????????????¨???????????????????????????????????????????§??????????????±???????1?????????????????????
 * 
 *         Sample Input 3 3 1 2 5 L 1 2 7 S 2 3 11 S 3 1 2 3 5 5 1 2 15 L 2 3 10
 *         L 4 5 7 L 1 3 30 S 3 4 100 S 5 1 3 5 4 1 0 0 Output for the Sample
 *         Input 18 269
 *
 */
public class Main{
	
	static int[][] water;
	static int[][] land;
	static int N;
	static int INF = 1 << 28;
	public static void main(String[] args) throws IOException {
		Scanner in = new Scanner(System.in);
		while (true){
			N = in.nextInt();
			int M = in.nextInt();
			if (N == 0 && M == 0) break;
			
			water = new int[N][N];
			land = new int[N][N];
			
			for (int i = 0; i < N; ++i){
				Arrays.fill(water[i], INF);
				Arrays.fill(land[i],INF);
				water[i][i] = 0;
				land[i][i] = 0;
			}
			
			for (int i = 0; i < M; ++i){
				int from = in.nextInt();
				int to = in.nextInt();
				from--;
				to--;
				
				int cost = in.nextInt();
				String mark = in.next();
				if (mark.equals("S")){
					water[from][to] = water[to][from] = cost;
				}
				else{
					land[from][to] = land[to][from] = cost;
				}
			}
			
			int C = in.nextInt();
			int[] city = new int[C];
			for (int i = 0; i < C; ++i){
				city[i] = in.nextInt() - 1;
			}
			
			warshallFloyd();
			
			int[][] dp = new int[C][N];
			for (int i = 0; i < C; ++i) Arrays.fill(dp[i], INF);
			for (int i = 0; i < N; ++i){
				dp[0][i] = land[city[0]][i] + water[i][city[0]];
			}
			
			for (int i = 1; i < C; ++i){
				for (int j = 0; j < N; ++j){
					for (int k = 0; k < N; ++k){
						if (j != k){
							dp[i][k] = Math.min(dp[i][k], dp[i-1][j] + land[city[i-1]][j] + water[j][k] + land[k][city[i]]);
						}
						else{
							dp[i][k] = Math.min(dp[i][k], dp[i-1][j] + land[city[i-1]][city[i]]);
						}
					}
				}
			}
			
			int min = INF;
			for (int i = 0; i < N; ++i){
				min = Math.min(min, dp[C-1][i]);
			}
			
			System.out.println(min);
		}
	}
	
	private static void warshallFloyd(){ 
		for (int i = 0; i < N; ++i){
			for (int j = 0; j < N; ++j){
				for (int k = 0; k < N; ++k){
					water[j][k] = Math.min(water[j][k], water[j][i] + water[i][k]);
					land[j][k] = Math.min(land[j][k], land[j][i] + land[i][k]);
				}
			}
		}
	}
	
	static class Scanner {

		private BufferedReader br;
		private StringTokenizer tok;

		public Scanner(InputStream is) throws IOException {
			br = new BufferedReader(new InputStreamReader(is));
			getLine();
		}

		private void getLine() throws IOException {
			while (tok == null || !tok.hasMoreTokens()) {
				tok = new StringTokenizer(br.readLine());
			}
		}

		private boolean hasNext() {
			return tok.hasMoreTokens();
		}

		public String next() throws IOException {
			if (hasNext()) {
				return tok.nextToken();
			} else {
				getLine();
				return tok.nextToken();
			}
		}

		public int nextInt() throws IOException {
			if (hasNext()) {
				return Integer.parseInt(tok.nextToken());
			} else {
				getLine();
				return Integer.parseInt(tok.nextToken());
			}
		}

		public long nextLong() throws IOException {
			if (hasNext()) {
				return Long.parseLong(tok.nextToken());
			} else {
				getLine();
				return Long.parseLong(tok.nextToken());
			}
		}

		public double nextDouble() throws IOException {
			if (hasNext()) {
				return Double.parseDouble(tok.nextToken());
			} else {
				getLine();
				return Double.parseDouble(tok.nextToken());
			}
		}
	}

}

Measured memory_bytes: 64732