#include<bits/stdc++.h>
using namespace std;
const int N=60;
const int P=1e9+7;
inline void mul(int n,int a[][N],int b[][N]){
int tmp[N][N];
memset(tmp,0,sizeof(tmp));
for(int i=1;i<=n;i++)
for(int l=1;l<=n;l++)
for(int j=1;j<=n;j++){
tmp[i][j]=(tmp[i][j]+1ll*a[i][l]*b[l][j]%P)%P;
}
memcpy(a,tmp,sizeof tmp);
}
inline void qpow(int n,int a[][N],int k){
int ans[N][N];
memset(ans,0,sizeof(ans));
for(int i=1;i<=n;i++)
ans[i][i]=1;
while(k){
if(k&1)
mul(n,ans,a);
mul(n,a,a);
k>>=1;
}
memcpy(a,ans,sizeof(ans));
}
inline int get(char ch){
if(ch>='a'&&ch<='z')
return ch-'a'+1;
return ch-'A'+27;
}
int n,m,k,ans;
int p[N][N];
inline int read(){
int s=0;
char ch=getchar();
while(!isdigit(ch))
ch=getchar();
while(isdigit(ch)){
s=(s<<3)+(s<<1)+(ch^48);
ch=getchar();
}
return s;
}
signed main(){
n=read(),m=read(),k=read();
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
p[i][j]=1;
for(int i=1;i<=k;i++){
char x,y,ch=getchar();
while(ch<'a'||ch>'z')
ch=getchar();
x=ch;
ch=getchar();
y=ch;
p[get(x)][get(y)]=0;
}
qpow(m,p,n-1);
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
ans=(ans+p[i][j])%P;
cout<<ans<<endl;
fflush(stdout);
return 0;
}