// 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: 9.524327197662645x):
#include<cstdio>

#include<cstring>

#include<algorithm>

using namespace std;

#define MAXN 205

#define MAXR 1005

#define MAXM 10005

int N,M,R;

int S[MAXN][MAXN],L[MAXN][MAXN];

int task[MAXR];

int dp[MAXR][MAXN];

int main()

{

	while(1)

	{

		scanf("%d%d",&N,&M);

		if(!N&&!M)break;

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

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

				S[i][j]=L[i][j]=1000000;

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

			S[i][i]=L[i][i]=0;

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

		{

			int a,b,t;char s[3];

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

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

			{

				S[a][b]=min(S[a][b],t);

				S[b][a]=min(S[b][a],t);

			}

			else

			{

				L[a][b]=min(L[a][b],t);

				L[b][a]=min(L[b][a],t);

			}

		}

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

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

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

				{

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

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

				}

		scanf("%d",&R);

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

			scanf("%d",task+i);

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

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

				dp[i][j]=1000000;

		dp[1][task[1]]=0;

		for(int i=2;i<=R;i++)//the Captain position

			for(int j=1;j<=N;j++)//the Ship position

			{

				dp[i][j]=min(dp[i][j],dp[i-1][j]+L[task[i-1]][task[i]]);

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

					dp[i][k]=min(dp[i][k],dp[i-1][j]+L[task[i-1]][j]+S[j][k]+L[k][task[i]]);

			}

		int ans=0x7FFFFFFF;

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

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

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

	}

	return 0;

}