#include <bits/stdc++.h>
bool h[100][100][26], g[100][100][26];
int f[100][100];
char s1[100], s2[100];
int c1[100], o[100], c2[100];
inline int read() {
  char ch;
  do {
    scanf("%c", &ch);
  } while (ch < 'a' || ch > 'z');
  return ch - 'a';
}
int main() {
  int len, n, i, j, k, ch1, ch2, p, a, b, ch;
  scanf("%s", s1 + 1);
  int len1 = strlen(s1 + 1);
  scanf("%s", s2 + 1);
  int len2 = strlen(s2 + 1);
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    o[i] = read();
    c1[i] = read();
    c2[i] = read();
  }
  for (i = 1; s1[i] != '\0'; i++) g[i][i][s1[i] - 'a'] = true;
  for (len = 0; len < len1; len++)
    for (k = 1; s1[k] != '\0'; k++)
      for (i = k + 1 - len; i <= k; i++) {
        j = i + len;
        if (j <= k || j > len1 || i < 1 || i > k) continue;
        for (ch1 = 0; ch1 < 26; ch1++)
          for (ch2 = 0; ch2 < 26; ch2++)
            if (g[i][k][ch1] && g[k + 1][j][ch2]) {
              for (p = 1; p <= n; p++)
                if (c1[p] == ch1 && c2[p] == ch2) g[i][j][o[p]] = true;
            }
      }
  for (i = 1; s2[i] != '\0'; i++) h[i][i][s2[i] - 'a'] = true;
  for (len = 0; len < len2; len++)
    for (k = 1; s2[k] != '\0'; k++)
      for (i = k + 1 - len; i <= k; i++) {
        j = i + len;
        if (j <= k || j > len2 || i < 1 || i > k) continue;
        for (ch1 = 0; ch1 < 26; ch1++)
          for (ch2 = 0; ch2 < 26; ch2++)
            if (h[i][k][ch1] && h[k + 1][j][ch2]) {
              for (p = 1; p <= n; p++)
                if (c1[p] == ch1 && c2[p] == ch2) h[i][j][o[p]] = true;
            }
      }
  memset(f, -1, sizeof(f));
  f[0][0] = 0;
  for (a = 1; s1[a] != '\0'; a++)
    for (b = 1; s2[b] != '\0'; b++) {
      for (i = 0; i < a; i++)
        for (j = 0; j < b; j++)
          if (f[i][j] > -1) {
            for (ch = 0; ch < 26; ch++)
              if (g[i + 1][a][ch] && h[j + 1][b][ch]) break;
            if (ch < 26)
              if (f[a][b] == -1 || f[i][j] + 1 < f[a][b]) f[a][b] = f[i][j] + 1;
          }
    }
  printf("%d\n", f[a - 1][b - 1]);
}
