#include <bits/stdc++.h>
using namespace std;
const long long M = 1000000007;
const int N_MAX = 52;
template <class T>
void mul(int n, const T A[N_MAX][N_MAX], const T x[N_MAX], T y[N_MAX]) {
  static T z[N_MAX];
  for (int i = 0; i < (n); i++) {
    z[i] = 0;
    for (int j = 0; j < (n); j++) z[i] = (z[i] + A[i][j] * x[j]) % M;
  }
  for (int i = 0; i < (n); i++) y[i] = z[i];
}
template <class T>
void mul(int n, const T A[N_MAX][N_MAX], const T B[N_MAX][N_MAX],
         T C[N_MAX][N_MAX]) {
  static T tmp[N_MAX][N_MAX];
  for (int i = 0; i < (n); i++)
    for (int j = 0; j < (n); j++) {
      tmp[i][j] = 0;
      for (int k = 0; k < (n); k++)
        tmp[i][j] = (tmp[i][j] + A[i][k] * B[k][j]) % M;
    }
  for (int i = 0; i < (n); i++)
    for (int j = 0; j < (n); j++) C[i][j] = tmp[i][j];
}
template <class T>
void pow(int n, const T A[N_MAX][N_MAX], long long m, T B[N_MAX][N_MAX]) {
  static T tmp[N_MAX][N_MAX];
  for (int i = 0; i < (n); i++)
    for (int j = 0; j < (n); j++) {
      tmp[i][j] = A[i][j];
      B[i][j] = (i == j ? 1 : 0);
    }
  for (int t = 0; m > 0; t++) {
    if (m & (1LL << t)) {
      mul(n, B, tmp, B);
      m -= 1LL << t;
    }
    mul(n, tmp, tmp, tmp);
  }
}
int enc(char c) {
  if ('a' <= c)
    return c - 'a';
  else
    return c - 'A' + 26;
}
int main() {
  long long n;
  int m, k;
  cin >> n >> m >> k;
  long long A[52][52];
  for (int i = 0; i < (m); i++)
    for (int j = 0; j < (m); j++) A[i][j] = 1;
  for (int i = 0; i < (k); i++) {
    char s[3];
    cin >> s;
    A[enc(s[0])][enc(s[1])] = 0;
  }
  long long v[52];
  for (int i = 0; i < (m); i++) v[i] = 1;
  pow(m, A, n - 1, A);
  mul(m, A, v, v);
  long long ans = 0;
  for (int i = 0; i < (m); i++) ans = (ans + v[i]) % M;
  cout << ans << endl;
  return 0;
}
