#include <bits/stdc++.h>
inline int getint() {
  register char ch;
  while (!isdigit(ch = getchar()))
    ;
  register int x = ch ^ '0';
  while (isdigit(ch = getchar())) x = (((x << 2) + x) << 1) + (ch ^ '0');
  return x;
}
inline char getalpha() {
  register char ch;
  while (!isalpha(ch = getchar()))
    ;
  return ch;
}
const int N = 52, S = 26;
char s[N], t[N];
int map[S][S], f[2][N][N], g[N][N];
inline int idx(const char &ch) { return ch - 'a'; }
inline void solve(const char s[], const int &n, int f[N][N]) {
  for (register int i = 1; i <= n; i++) {
    f[i][i] |= 1 << idx(s[i]);
  }
  for (register int i = 1; i <= n; i++) {
    for (register int j = i - 1; j; j--) {
      for (register int k = j; k < i; k++) {
        for (register int a = 0; a < 26; a++) {
          if (!(f[j][k] >> a & 1)) continue;
          for (register int b = 0; b < 26; b++) {
            if (!(f[k + 1][i] >> b & 1)) continue;
            f[j][i] |= map[a][b];
          }
        }
      }
    }
  }
}
int main() {
  scanf("%s%s", &s[1], &t[1]);
  for (register int i = getint(); i; i--) {
    const char a = getalpha(), b = getalpha(), c = getalpha();
    map[idx(b)][idx(c)] |= 1 << idx(a);
  }
  const int n = strlen(&s[1]), m = strlen(&t[1]);
  solve(s, n, f[0]);
  solve(t, m, f[1]);
  for (register int i = 0; i <= n; i++) {
    for (register int j = 0; j <= m; j++) {
      g[i][j] = INT_MAX;
    }
  }
  g[0][0] = 0;
  for (register int i = 1; i <= n; i++) {
    for (register int j = 1; j <= m; j++) {
      for (register int k = 1; k <= i; k++) {
        for (register int l = 1; l <= j; l++) {
          if (!(f[0][k][i] & f[1][l][j])) continue;
          if (g[k - 1][l - 1] == INT_MAX) continue;
          g[i][j] = std::min(g[i][j], g[k - 1][l - 1] + 1);
        }
      }
    }
  }
  printf("%d\n", g[n][m] == INT_MAX ? -1 : g[n][m]);
  return 0;
}
