#include <bits/stdc++.h>
namespace OI {
template <class T>
T gcd(T x, T y) {
  return !y ? x : gcd(y, x % y);
}
template <class T>
T Fabs(T x) {
  return x < 0 ? -x : x;
}
template <class T>
void rd(T &x) {
  x = 0;
  int f = 1;
  char c;
  while (!isdigit(c = getchar()))
    if (c == '-') f = -1;
  do {
    x = (x << 3) + (x << 1) + (c ^ 48);
  } while (isdigit(c = getchar()));
  x *= f;
}
template <class T>
void pt(T x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) pt(x / 10);
  putchar(x % 10 ^ 48);
}
}  // namespace OI
using namespace OI;
using namespace std;
const int N = 55, INF = 0x3f3f3f3f;
int n, m, K, a[N], b[N], c[N], dp[N][N];
bool ok1[N][N][N], ok2[N][N][N];
char s[N], t[N], str[10];
int main() {
  scanf("%s %s", s + 1, t + 1);
  n = strlen(s + 1);
  m = strlen(t + 1);
  rd(K);
  for (int i = 1; i <= K; i++)
    scanf("%s", str), a[i] = str[0] - 'a', b[i] = str[3] - 'a',
                      c[i] = str[4] - 'a';
  for (int i = 1; i <= n; i++) ok1[i][i][s[i] - 'a'] = 1;
  for (int i = 1; i <= m; i++) ok2[i][i][t[i] - 'a'] = 1;
  for (int i = n; i >= 1; i--)
    for (int j = i + 1; j <= n; j++)
      for (int k = i; k < j; k++)
        for (int w = 1; w <= K; w++)
          if (ok1[i][k][b[w]] && ok1[k + 1][j][c[w]]) ok1[i][j][a[w]] = 1;
  for (int i = m; i >= 1; i--)
    for (int j = i + 1; j <= m; j++)
      for (int k = i; k < j; k++)
        for (int w = 1; w <= K; w++)
          if (ok2[i][k][b[w]] && ok2[k + 1][j][c[w]]) ok2[i][j][a[w]] = 1;
  memset(dp, 0x3f, sizeof dp);
  dp[0][0] = 0;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      for (int k = 1; k <= i; k++)
        for (int l = 1; l <= j; l++)
          for (int w = 0; w < 26; w++)
            if (ok1[k][i][w] && ok2[l][j][w])
              dp[i][j] = min(dp[i][j], dp[k - 1][l - 1] + 1);
  if (dp[n][m] == INF)
    puts("-1");
  else
    pt(dp[n][m]);
  return 0;
}
