#include<bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
int n,m,R;
long long land[300][300],water[300][300],dp[1005][300];
int a[1005];
long long min(long long a, long long b)
{
    if (a < b) return a;
    else return b;
}
void pre(){
    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++){
          land[i][j]=land[j][i]=inf;
          water[i][j]=water[j][i]=inf;
        }
    for(int i=1;i<=n;i++)
         land[i][i]=0,water[i][i]=0;
}

void floyd(){
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++){
                if(k==i||k==j||i==j) continue;
                water[i][j]=min(water[i][j],water[i][k]+water[k][j]);
                land[i][j]=min(land[i][j],land[i][k]+land[k][j]);
            }
}

int main(){
    while(1){
     scanf("%d%d",&n,&m);
     if(n==0&&m==0) break;
     pre();
     for(int i=1;i<=m;i++){
         int l,r; string str;
         long long w;
         scanf("%d%d%lld",&l,&r,&w);
         cin>>str;
         if(str=="L") land[l][r]=land[r][l]=min(land[r][l],w);
         else water[l][r]=water[r][l]=min(water[r][l],w);
    }
    floyd();
    scanf("%d",&R);
    for(int i=1;i<=R;i++)
        for(int j=1;j<=n;j++)
          dp[i][j]=inf;
    for(int i=1;i<=R;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)
      dp[1][i]=water[a[1]][i]+land[i][a[1]];//第一次出发可以将船停到任意处再坐船回到当前目标点
    for(int i=2;i<=R;i++)//目的地
     for(int j=1;j<=n;j++)//上一次的下船点
     {
         dp[i][j]=min(dp[i][j],land[a[i-1]][a[i]]+dp[i-1][j]);//走陆地
         for(int k=1;k<=n;k++)//新的下船点
         dp[i][k]=min(dp[i][k],dp[i-1][j]+land[a[i-1]][j]+water[j][k]+land[k][a[i]]);//走水路
     }
         
     long long minn=inf;
     for(int i=1;i<=n;i++)
        minn=min(minn,dp[R][i]);
     printf("%lld\n",minn);
    }
    return 0;
}
