#include <iostream>
#include <algotithm>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
struct SZ
{
char name[50];
};
struct Edge
{
int w;
int pos;
};
int type,n,m;
void bfs(int x,int v[],SZ a[],vector<Edge>S[])
{
v[x] = 1;
queue<int> q;
q.push(x);
while(!q.empty())
{
}
}
int main()
{
cin>>type>>n>>m;
SZ a[n+1];
vector<Edge> S[n+1];
for(int i = 1 ; i <= n ; i ++) cin>>a[i].name;
for(int i = 1 ; i <= m ; i ++)
{
char c1[5],c2[5];
int w;
if(type==0||type==2)
{
cin>>c1>>c2;
}
if(type==1||type==3)
{
cin>>c1>>c2>>w;
}
int p = -1 , q = -1;
for(int j = 1 ; j <= n ; j ++)
{
if(strcmp(a[j].name,c1)==0) p = j;
if(strcmp(a[j].name,c2)==0) q = j;
if(p!=-1&&q!=-1) break;
}
Edge ele;
if(type==0)
{
ele.w = 1;
ele.pos = q;
S[p].push_back(ele);
}
if(type==1)
{
ele.w = w;
ele.pos = q;
S[p].push_back(ele);
}
if(type==2)
{
ele.w = 1;
ele.pos = q;
S[p].push_back(ele);
ele.pos = p;
S[q].push_back(ele);
}
if(type==3)
{
ele.w = w;
ele.pos = q;
S[p].push_back(ele);
ele.pos = p;
S[q].push_back(ele);
}
}
int v[n+1] = {0};
for(int i = 1 ; i <= n ; i ++)
{
if(v[i]==0)
{
bfs(i,v,a,S);
}
}
}