#include <bits/stdc++.h>
using namespace std;
const int N=10000+5;
const int M=10000*100+5;
char s1[N],s2[N];
int n,cnt=1;
int t1[M],t2[M],fa[M],len[30];
int id[30][105];
int frt(int x){
if (fa[x]==x)return x;
return fa[x]=frt(fa[x]);
}
int main(){
freopen ("encrypt.in","r",stdin);
freopen ("encrypt.out","w",stdout);
scanf("%s%s",s1+1,s2+1);
scanf("%d",&n);
for (int i=1;i<=n;i++){
char p[3];int l;
scanf("%s%d",p,&l);
len[p[0]-'a']=l;
}
int tot=0;
for (int i=1;i<=strlen(s1+1);i++){
int now=s1[i]-'a';
if (isdigit(s1[i]))t1[++tot]=s1[i]-'0';
else{
for (int j=1;j<=len[now];j++){
if (!id[now][j])id[now][j]=++cnt;
t1[++tot]=id[now][j];
}
}
}
tot=0;
for (int i=1;i<=strlen(s2+1);i++){
int now=s2[i]-'a';
if (isdigit(s2[i]))t2[++tot]=s2[i]-'0';
else{
for (int j=1;j<=len[now];j++){
if (!id[now][j])id[now][j]=++cnt;
t2[++tot]=id[now][j];
}
}
}
for (int i=0;i<=cnt;i++)fa[i]=i;
for (int i=1;i<=tot;i++){
int x=frt(t1[i]),y=frt(t2[i]);
if (x==y)continue;
fa[x]=y;
}
int x=frt(0),y=frt(1);
if (x==y)printf("0\n");
else{
long long ans=1;
for (int i=0;i<=cnt;i++){
if (fa[i]!=i)continue;
if (i!=x&&i!=y)ans<<=1;
}
printf("%lld\n",ans);
}
return 0;
}