#include <iostream>
#include <map>
#include <vector>
#include <string>
#include <queue>
#include <string.h>
#include <stdio.h>
using namespace std;
vector<int> graph[1005];
bool visit[1005];
bool visited[1005][1005];
map<string,int> mp;
int p,t;
void dfs(int u,int v)
{
visited[u][v]=1;
int tmp;
for(int i=0;i<graph[v].size();i++)
{
tmp=graph[v][i];
if(!visited[u][tmp])
{
dfs(u,tmp);
}
}
}
int main()
{
string s,s1;
while(cin>>p>>t)
{
if(p==0 && t==0)
break;
mp.clear();
getchar();
for(int i=0;i<p;i++)
{
getline(cin,s);
mp[s]=i;
graph[i].clear();
}
for(int i=0;i<t;i++)
{
getline(cin,s);
getline(cin,s1);
graph[mp[s]].push_back(mp[s1]);
}
memset(visited,0,sizeof(visited));
for(int i=0;i<p;i++)
dfs(i,i);
memset(visit,0,sizeof(visit));
int cnt=0;
for(int i=0;i<p;i++)
{
if(!visit[i])
{
cnt++;
for(int j=i+1;j<p;j++)
{
if(!visit[j] && visited[i][j] && visited[j][i])
{
visit[j]=1;
}
}
}
}
cout<<cnt<<"\n";
}
return 0;
}