#include<stdio.h>
#define rep(i,n) for(int i=0;(i)<(n);(i)++)
#define min(x,y) ((x)<(y)?(x):(y))
#define INF 100000000
int n,m;
int A[200][200],B[200][200];
int dp[2][200];
int main(void){
    while(1){
        scanf("%d%d",&n,&m);
        if(n+m==0) break;
        rep(i,n) {
            rep(j,n){
                if(i==j) A[i][j]=B[i][j]=0;
                else A[i][j]=B[i][j]=INF;
            }
        }
        rep(i,m){
            int a,b,c; char d[3];
            scanf("%d%d%d%s",&a,&b,&c,d); //printf("%s\n",d);
            a--; b--;
            if(d[0]=='L') A[a][b]=A[b][a]=min(A[a][b],c);
            else B[a][b]=B[b][a]=min(B[a][b],c);
        }
        rep(k,n){
            rep(i,n){
                rep(j,n){
                    A[i][j]=min(A[i][j],A[i][k]+A[k][j]);
                    B[i][j]=min(B[i][j],B[i][k]+B[k][j]);
                }
            }
        }
        int R;
        scanf("%d",&R);
        int prev; scanf("%d",&prev); prev--;
        rep(i,2) rep(j,n) dp[i][j]=INF;
        dp[1][prev]=0;
        for(int i=1;i<R;i++){
            int cur; scanf("%d",&cur); cur--;
            rep(j,n){
                rep(k,n){
                    if(j!=k)
                        dp[(i+1)&1][j]=min(dp[(i+1)&1][j],dp[i&1][k]+
                                           A[prev][k]+B[k][j]+A[j][cur]);
                    else dp[(i+1)&1][j]=min(dp[(i+1)&1][j],
                                            dp[i&1][j]+A[prev][cur]);
                }
            }
            rep(j,n) dp[i&1][j]=INF;
            prev=cur;
        }
        int mi=INF;
        rep(i,n) mi=min(mi,dp[R&1][i]);
        printf("%d\n",mi);
    }
}

