#include?<bits/stdc++.h>??
using?namespace?std;??
int?las[10005],nex[10005],Arrive[10005],qz[10005],cnt,K;??
int?Bit[100005];??
bool?pd[100005];??
int?bel[100005],Size[100005],Temp;??
int?Lt[505][505];??
int?dis[100005][205];??
int?Id[100005];??
int?x[105],y[105];??
bool?vis[10005][205];??
map<string,int>?qwq;??
void?jt(int?x,int?y,int?z)??
{??
????cnt++;??
????nex[cnt]=las[x];??
????las[x]=cnt;??
????Arrive[cnt]=y;??
????qz[cnt]=z;??
}??
queue<pair<int,int>?>que;??
int?dp[10005];??
int?N,M;??
void?SPFA()??
{??
????while?(!que.empty())??
????{??
????????int?u=que.front().first;??
????????int?d=que.front().second;??
????????que.pop();??
????????vis[u][d]=false;??
????????for?(int?i=las[d];i;i=nex[i])??
??????????{??
????????????int?v=Arrive[i];??
????????????if?(dis[u|Id[v]][v]>dis[u][d]+qz[i])??
??????????????{??
????????????????dis[u|Id[v]][v]=dis[u][d]+qz[i];??
????????????????if?(!vis[u|Id[v]][v])??
??????????????????{??
????????????????????que.push(make_pair(u|Id[v],v));??
????????????????????vis[u|Id[v]][v]=true;??
???????????????????}??
????????????}??
??????????}??
????}??
????return;??
}??
int?main()??
{??
????memset(dis,63,sizeof(dis));??
????int?INF=dis[0][0];??
????scanf("%d%d",&N,&M);??????
????string?s1;????
????for?(int?i=1;i<=N;i++)??
????{??
????????cin>>s1;??
????????qwq[s1]=i;??
????}?????
????for?(int?i=1;i<=M;i++)??
??????{??
????????string?s1,s2;??
????????int?w;??
????????cin>>s1>>s2>>w;??
????????jt(qwq[s1],qwq[s2],w);??
????????jt(qwq[s2],qwq[s1],w);??
??????}??
??
?
????int?cntt=0;??
????string?s2;??
????for?(int?i=1;i<=4;i++)??
??????{??
????????int?u,v;??
????????cin>>s1;??
????????u=qwq[s1];??
????????cin>>s2;??
????????v=qwq[s2];??
????????if?(u==v)continue;??
????????if?(bel[u]&&bel[v]){??
????????????int?upd=bel[v];if?(bel[u]==bel[v])continue;??
????????????for?(int?i=1;i<=Size[upd];i++)??
????????????Lt[bel[u]][++Size[bel[u]]]=Lt[upd][i],bel[Lt[upd][i]]=bel[u];??
????????????Size[upd]=0;??
????????}??
????????else?if?(bel[u]||bel[v]){??
????????????if?(bel[v])??
??????????????swap(u,v);??
????????????bel[v]=bel[u];??
????????????Lt[bel[u]][++Size[bel[u]]]=v;??
????????}??
????????else?{??
????????????bel[u]=bel[v]=++cntt;??
????????????Lt[cntt][++Size[cntt]]=u;Lt[cntt][++Size[cntt]]=v;??
????????}??
??????}????
????for?(int?i=1;i<=N;i++)??
??????if?(bel[i])??
????????{??
????????????Temp++;??
????????????Id[i]=(1<<(Temp-1));??
????????????dis[Id[i]][i]=0;??
????????}??
????else?dis[0][i]=0;??
????int?st=1<<Temp;??
????for?(int?ST=0;ST<st;ST++)??
????{??
????????for?(int?i=1;i<=N;i++)??
????????????{??
????????????for?(int?mst=(ST-1)&ST;mst;mst=(mst-1)&ST)??
??????????????dis[ST][i]=min(dis[ST][i],dis[mst|Id[i]][i]+dis[(ST-mst)|Id[i]][i]);??
????????????if?(dis[ST][i]<INF&&!vis[ST][i])??
??????????????que.push(make_pair(ST,i)),vis[ST][i]=true;??
????????????}??
????????SPFA();??
????}??
????memset(dp,63,sizeof(dp));?????
????for?(int?i=1;i<=N;i++)??
??????for?(int?j=0;j<=st;j++)??
????????dp[j]=min(dis[j][i],dp[j]);??
??
?
????int?Ncnt=cntt;??
????cntt=0;??
????for?(int?i=1;i<=Ncnt;i++)??
??????{??
????????if?(Size[i])??
??????????{??
????????????cntt++;??
????????????for?(int?j=1;j<=Size[i];j++)??
??????????????Bit[cntt]|=Id[Lt[i][j]];??
????????????pd[Bit[cntt]]=true;??
??????????}??
??????}??
??????dp[0]=0;??
????for?(int?i=0;i<st;i++)??
??????for?(int?j=i;j;j=(j-1)&i)??
??????????if?(pd[j]&pd[i-j])??
????????????pd[i]=true;??
????for?(int?i=0;i<st;i++)??
????????if?(pd[i])??
?????????for?(int?j=i;j;j=(j-1)&i)??
???????????if??(pd[j])?dp[i]=min(dp[i],dp[i-j]+dp[j]);??
????printf("%d\n",dp[st-1]);??
????return?0;??
}??