#include <bits/stdc++.h>
using namespace std;
const int INF=1<<25;
int L[200][200];
int S[200][200];
int d[2][200];
int z[1000];
int main() {
    int N,M;
    while(scanf("%d %d",&N,&M),N) {
        fill((int*)L,(int*)(L+200),INF);
        fill((int*)S,(int*)(S+200),INF);
        for(int i=0;i<N;i++) {
            L[i][i]=S[i][i]=0;
        }
        for(int i=0;i<M;i++) {
            int x,y,t;
            char s[2];
            scanf("%d %d %d %s",&x,&y,&t,s);x--;y--;
            if(s[0]=='L') {
                L[x][y]=L[y][x]=min(L[x][y],t);
            }else {
                S[x][y]=S[y][x]=min(S[x][y],t);
            }
        }
        int R;
        scanf("%d",&R);
        for(int i=0;i<R;i++) {
            scanf("%d",&z[i]);z[i]--;
        }
        for(int k=0;k<N;k++) {
            for(int i=0;i<N;i++) {
                for(int j=0;j<N;j++) {
                    L[i][j]=min(L[i][j],L[i][k]+L[k][j]);
                    S[i][j]=min(S[i][j],S[i][k]+S[k][j]);
                }
            }
        }
        fill((int*)d,(int*)(d+2),INF);
        d[0][z[0]]=0;
        for(int i=0;i+1<R;i++) {
            for(int j=0;j<N;j++) {
                d[(i+1)&1][j]=INF;
            }
            for(int j=0;j<N;j++) {
                d[(i+1)&1][j]=min(d[(i+1)&1][j],d[i&1][j]+L[z[i]][z[i+1]]);
                for(int k=0;k<N;k++) {
                    d[(i+1)&1][j]=min(d[(i+1)&1][j],d[i&1][k]+L[z[i]][k]+S[k][j]+L[j][z[i+1]]);
                }
            }
        }
        int ans=INF;
        for(int i=0;i<N;i++) {
            ans=min(ans,d[(R-1)&1][i]);
        }
        printf("%d\n",ans);
    }
    
}