#include <bits/stdc++.h>
using namespace std;
long long n, m, k;
long long read() {
  long long s = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    s = s * 10 + ch - '0';
    ch = getchar();
  }
  return s * f;
}
inline void print(long long *f, long long len) {
  for (long long i = 0; i < len; i++) printf("%lld ", f[i]);
  puts("");
}
const long long maxn = 139;
char s1[maxn], s2[maxn];
vector<pair<long long, long long> > v[maxn];
long long f[maxn][maxn][maxn], g[maxn][maxn][maxn];
void pre() {
  for (long long i = 1, iend = n; i <= iend; ++i) f[i][i][s1[i]] = 1;
  for (long long i = 2, iend = n; i <= iend; ++i) {
    for (long long j = 1, jend = n; j <= jend; ++j) {
      long long k = i + j - 1;
      if (k > n) break;
      for (long long ch = 'a', chend = 'z'; ch <= chend; ++ch) {
        for (long long t = j, tend = k - 1; t <= tend; ++t) {
          for (auto nw : v[ch]) {
            f[j][k][ch] |= f[j][t][nw.first] && f[t + 1][k][nw.second];
          }
        }
      }
    }
  }
  for (long long i = 1, iend = m; i <= iend; ++i) g[i][i][s2[i]] = 1;
  for (long long i = 2, iend = m; i <= iend; ++i) {
    for (long long j = 1, jend = m; j <= jend; ++j) {
      long long k = i + j - 1;
      if (k > m) break;
      for (long long ch = 'a', chend = 'z'; ch <= chend; ++ch) {
        for (long long t = j, tend = k - 1; t <= tend; ++t) {
          for (auto nw : v[ch]) {
            g[j][k][ch] |= g[j][t][nw.first] && g[t + 1][k][nw.second];
          }
        }
      }
    }
  }
}
long long dp[maxn][maxn];
signed main() {
  cin >> (s1 + 1) >> (s2 + 1);
  n = strlen(s1 + 1), m = strlen(s2 + 1);
  long long kk = read();
  for (long long i = 1, iend = kk; i <= iend; ++i) {
    char c1, c2, c3;
    while (!isalpha(c1 = getchar()))
      ;
    while (!isalpha(c2 = getchar()))
      ;
    c3 = getchar();
    v[c1].push_back(make_pair(c2, c3));
  }
  pre();
  memset(dp, 0x3f, sizeof(dp));
  dp[0][0] = 0;
  for (long long i = 1, iend = n; i <= iend; ++i) {
    for (long long j = 1, jend = m; j <= jend; ++j) {
      for (long long I = 1, Iend = i; I <= Iend; ++I) {
        for (long long J = 1, Jend = j; J <= Jend; ++J) {
          for (long long ch = 'a', chend = 'z'; ch <= chend; ++ch) {
            if (f[I][i][ch] && g[J][j][ch])
              dp[i][j] = min(dp[i][j], dp[I - 1][J - 1] + 1);
          }
        }
      }
    }
  }
  if (dp[n][m] <= 1e15) {
    printf("%lld", dp[n][m]);
  } else {
    puts("-1");
  }
}
