#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include <functional>
#include <set>
#include <queue>
#include <cctype>
#include <climits>
#include <stack>
using namespace std;

int n,m,r;
const int INF=1e7;
int land[200][200],sea[200][200],z[1000];
typedef pair<int,int> P;

int main(){


	while(cin>>n>>m,n){
		
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++) land[i][j]=sea[i][j]=INF;
			land[i][i]=sea[i][i]=0;
		}
		
		for(int i=0;i<m;i++){
			int x,y,t;
			string s;
			cin>>x>>y>>t>>s;
			x--; y--;
			if(s=="S"){
				sea[x][y]=min(sea[x][y],t);
				sea[y][x]=min(sea[y][x],t);
			}else{
				land[x][y]=min(land[x][y],t);
				land[y][x]=min(land[y][x],t);			}
		}
		
		for(int k=0;k<n;k++){
			for(int i=0;i<n;i++){
				for(int j=0;j<n;j++){
					sea[i][j]=min(sea[i][j],sea[i][k]+sea[k][j]);
					land[i][j]=min(land[i][j],land[i][k]+land[k][j]);
				}
			}
		}
		
		cin>>r;
		for(int i=0;i<r;i++){
			cin>>z[i];
			z[i]--;
		}
		
		vector<vector<int> > dp(1001,vector<int>(201,INF));
		dp[0][z[0]]=0;

		for(int i=1;i<r;i++){
			for(int j=0;j<n;j++){
				
				//z[i]???????????????????????¨??°???z[i-1]
				
				for(int k=0;k<n;k++){
					//????????????j?????§?§???????j??????k????????????k??????z[i]?????????				
					dp[i][k]=min(dp[i][k],dp[i-1][j]+land[z[i-1]][j]+sea[j][k]+land[k][z[i]]);
					
				}
				
				//????????§?§????
				dp[i][j]=min(dp[i][j],dp[i-1][j]+land[z[i-1]][z[i]]);
			}
		}


		int res=INF;		
		for(int i=0;i<n;i++){
			res=min(res,dp[r-1][i]);
		}
		
		cout<<res<<endl;
		
	}
}