// Slower C++ solution:
#include<iostream>

#include<cstdio>

#include<cstring>

using namespace std;

const int inf=0x3f3f3f3f;

const int maxn=2e2+10;

int n,m,num;

int costl[maxn][maxn],costs[maxn][maxn];

int dp[1005][maxn];

int a[1005];

int main()

{

    while(scanf("%d%d",&n,&m)&&n&&m)

    {

        for(int i=1;i<=n;i++)

            for(int j=1;j<=n;j++)

            {

                if(i==j)

                {

                    costl[i][j]=costs[i][j]=0;

                }

                else

                {

                     costl[i][j]=costs[i][j]=inf/3;

                }

            }

        for(int i=1;i<=m;i++)

        {

            char s[2];

            int x,y,val;

            scanf("%d%d%d%s",&x,&y,&val,s);

            if(s[0]=='L')

            {

                costl[x][y]=costl[y][x]=min(val,costl[x][y]);

            }

            else

            {

                costs[x][y]=costs[y][x]=min(val,costs[x][y]);

            }

        }

        scanf("%d",&num);

        for(int i=1;i<=num;i++)

        {

            scanf("%d",&a[i]);

        }

        for(int k=1;k<=n;k++)

            for(int i=1;i<=n;i++)

                for(int j=1;j<=n;j++)

                {

                    costs[i][j]=min(costs[i][j],costs[i][k]+costs[k][j]);

                    costl[i][j]=min(costl[i][j],costl[i][k]+costl[k][j]);

                }

        memset(dp,0x3f,sizeof(dp));

        dp[1][a[1]]=0;

        for(int i=2;i<=num;i++)

            for(int j=1;j<=n;j++)

            {

                dp[i][j]=min(dp[i][j],dp[i-1][j]+costl[a[i-1]][a[i]]);

                for(int k=1;k<=n;k++)

                {

                    //dp[i][k]=min(dp[i][k],dp[i-1][j]+costl[a[i-1]][j]+costs[j][k]+costl[k][a[i]]);

                    dp[i][j]=min(dp[i][j],dp[i-1][k]+costl[a[i-1]][k]+costs[k][j]+costl[j][a[i]]);

                }

            }

        int ans=inf;

        for(int i=1;i<=n;i++)

        {

            ans=min(ans,dp[num][i]);

        }

        printf("%d\n",ans);

    }

}

// Faster C++ solution for the same problem (measured speedup: 1.9359774857423933x):
#include<cstdio>

#include<string>

#include<sstream>

#include<cstring>

#include<cmath>

#include<vector>

#include<set>

#include<map>

#include<queue>

#include<stack>

#include<iostream>

#include<algorithm>

using namespace std;

typedef long long ll;

typedef pair<int,int> pa;

const int inf=1e8;

int mml[205][205],mms[205][205],dp[1005][205],num[1005];

int main(){

    int n,m,a,b,c,r;

    char str[5];

    while(scanf("%d%d",&n,&m)&&n){

        for(int i=0;i<n;i++){

            mml[i][i]=mms[i][i]=0;

            for(int j=i+1;j<n;j++){

                mml[i][j]=mml[j][i]=inf;

                mms[i][j]=mms[j][i]=inf;

            }

        }

        for(int i=0;i<m;i++){

            scanf("%d%d%d%s",&a,&b,&c,str);

            a--,b--;

            if(str[0]=='L'){

                mml[a][b]=mml[b][a]=min(mml[a][b],c);

            }else{

                mms[a][b]=mms[b][a]=min(mms[a][b],c);

            }

        }

        scanf("%d",&r);

        for(int i=0;i<r;i++){

            scanf("%d",&num[i]);

            num[i]--;

        }

        for(int k=0;k<n;k++){

            for(int i=0;i<n;i++){

                for(int j=0;j<n;j++){

                    mml[i][j]=min(mml[i][j],mml[i][k]+mml[k][j]);

                    mms[i][j]=min(mms[i][j],mms[i][k]+mms[k][j]);

                }

            }

        }

        for(int i=0;i<r;i++){

            for(int j=0;j<n;j++){

                dp[i][j]=inf;

            }

        }

        for(int i=0;i<n;i++){

            dp[0][i]=mms[num[0]][i]+mml[i][num[0]];

        }

        int ans=inf;

        for(int i=1;i<r;i++){

            for(int j=0;j<n;j++){

                for(int k=0;k<n;k++){

                    if(j!=k)

                        dp[i][k]=min(dp[i][k],dp[i-1][j]+mml[num[i-1]][j]+mms[j][k]+mml[k][num[i]]);

                    else dp[i][j]=min(dp[i][j],dp[i-1][j]+mml[num[i-1]][num[i]]);

                }

            }

        }

        for(int i=0;i<n;i++){

            ans=min(ans,dp[r-1][i]);

        }

        printf("%d\n",ans);

    }

    return 0;

}