#include <bits/stdc++.h>
typedef int arr[55][55];
char s0[55], s1[55], opr[9];
int x[55], y[55], z[55], f[55][55], n0, n1, m;
bool b[55][55][55];
arr e0, e1;
void work(int &n, char *s, arr &e) {
  n = strlen(s);
  memset(b, 0, sizeof(b));
  for (int i = 0; i < n; i++) b[i][i + 1][s[i] - 97] = 1;
  for (int j = 2; j <= n; j++)
    for (int i = 0; i + j <= n; i++)
      for (int k = i + 1; k < i + j; k++)
        for (int c = 0; c < m; c++)
          b[i][i + j][z[c]] |= b[i][k][x[c]] && b[k][i + j][y[c]];
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j <= n; j++)
      for (int k = 0; k < 26; k++)
        if (b[i][j][k]) e[i][j] |= 1 << k;
}
int main() {
  scanf("%s%s%d", s0, s1, &m);
  for (int i = 0; i < m; i++)
    scanf("%s", opr), x[i] = opr[3] - 97, y[i] = opr[4] - 97,
                      z[i] = opr[0] - 97;
  work(n0, s0, e0), work(n1, s1, e1);
  memset(f, 6, sizeof(f));
  f[0][0] = 0;
  for (int i = 0; i <= n0; i++)
    for (int x = 0; x <= n1; x++)
      for (int j = i + 1; j <= n0; j++)
        for (int y = x + 1; y <= n1; y++)
          if (e0[i][j] & e1[x][y] && f[i][x] + 1 < f[j][y])
            f[j][y] = f[i][x] + 1;
  printf("%d\n", f[n0][n1] <= 100 ? f[n0][n1] : -1);
  return 0;
}
