#include<iostream>
#include<cstring>
using namespace std;
char queue[2001][6];
int cnt=0,vis[9999];
char str[6];
struct node{
int x;
int y;
};
node a[16];
int c_to_n(char str[],int len)
{
int i,sum=0;
for(i=0;i<len;i++)
sum=sum*10+(str[i]-'0');
return sum;
}
int main()
{
int len,d, k,i,head=1,tail=1,j;
char strls[6];
scanf("%s",str);
cin>>k;
for(i=1;i<=k;i++)
cin>>a[i].x>>a[i].y;
len=strlen(str);//这里0不予考虑所以长度是固定的。
tail++;
strcpy(queue[head],str);
vis[c_to_n(str,len)]=1;
cnt++;
while(head<tail)
{
strcpy(strls,queue[head]);
for(i=1;i<=k;i++)
{
for(j=0;j<len;j++)
{
if(strls[j]==a[i].x+'0') //这里又犯了一个低级错误,就是==写成=,浪费了大量时间来寻找,看来代码量还是太少,继续刷题
{ strls[j]=a[i].y+'0';
d=c_to_n(strls,len);
if(vis[d]==0)
{
strcpy(queue[tail],strls);tail++;cnt++;
vis[d]=1;
cout<<d<<endl;
}
strcpy(strls,queue[head]);
}
}
}
head++;
}
cout<<cnt<<endl;
return 0;
}