#include<bits/stdc++.h>
using namespace std;

#define int long long

#define rep(i,n) for(int i=0;i<(n);i++)
#define pb push_back
#define all(v) (v).begin(),(v).end()
#define fi first
#define se second
typedef vector<int>vint;
typedef pair<int,int>pint;
typedef vector<pint>vpint;

template<typename A,typename B>inline void chmin(A &a,B b){if(a>b)a=b;}
template<typename A,typename B>inline void chmax(A &a,B b){if(a<b)a=b;}
const int INF=1001001001001001001ll;

int L[333][333],S[333][333];

signed main(){
	int N,M;
	while(cin>>N>>M,N){
		fill_n(*L,333*333,INF);
		fill_n(*S,333*333,INF);
		rep(i,M){
			int a,b,d;
			char c;
			cin>>a>>b>>d>>c;
			a--;b--;
			if(c=='L'){
				chmin(L[a][b],d);
				chmin(L[b][a],d);
			}
			else{
				chmin(S[a][b],d);
				chmin(S[b][a],d);
			}
		}

		rep(i,N)L[i][i]=S[i][i]=0;
		rep(k,N)rep(i,N)rep(j,N){
			chmin(L[i][j],L[i][k]+L[k][j]);
			chmin(S[i][j],S[i][k]+S[k][j]);
		}

		int R;cin>>R;
		vint z(R);
		rep(i,R)cin>>z[i],z[i]--;

		vint dp(N,INF);
		dp[z[0]]=0;
		for(int i=1;i<R;i++){
			vint nex(N,INF);
			rep(j,N)rep(k,N){
				chmin(nex[k],dp[j]+L[z[i-1]][j]+S[j][k]+L[k][z[i]]);
			}
			rep(j,N)chmin(nex[j],dp[j]+L[z[i-1]][z[i]]);
			dp=nex;
		}
		int ans=*min_element(all(dp));
		cout<<ans<<endl;
	}
	return 0;
}
