#include <bits/stdc++.h>
char s1[110], s2[110];
int n, m;
int T;
int a[110], b[110], c[110];
typedef int dptype[110][110][26];
dptype dp1, dp2;
bool dp(dptype &_dp, int l, int r, int ch) {
  if (_dp[l][r][ch] != -1) return _dp[l][r][ch];
  for (int k = 1; k <= T; k++)
    if (a[k] == ch)
      for (int i = l; i < r; i++)
        if (dp(_dp, l, i, b[k]) && dp(_dp, i + 1, r, c[k]))
          return _dp[l][r][ch] = 1;
  return _dp[l][r][ch] = 0;
}
const int inf = 0x0f0f0f0f;
int g[110][110];
void minto(int &a, int b) {
  if (b < a) a = b;
}
int main() {
  scanf("%s%s", s1 + 1, s2 + 1);
  n = strlen(s1 + 1);
  m = strlen(s2 + 1);
  for (int i = 1; i <= n; i++) s1[i] -= 'a';
  for (int i = 1; i <= m; i++) s2[i] -= 'a';
  scanf("%d", &T);
  for (int i = 1; i <= T; i++) {
    char buf[10];
    scanf("%s", buf);
    a[i] = buf[0] - 'a';
    b[i] = buf[3] - 'a';
    c[i] = buf[4] - 'a';
  }
  memset(dp1, -1, sizeof(dp1));
  memset(dp2, -1, sizeof(dp2));
  for (int i = 1; i <= n; i++) dp1[i][i][s1[i]] = 1;
  for (int i = 1; i <= m; i++) dp2[i][i][s2[i]] = 1;
  memset(g, 0x0f, sizeof(g));
  g[0][0] = 0;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      for (int ch = 0; ch < 26; ch++)
        for (int p = i; p; p--)
          if (dp(dp1, p, i, ch))
            for (int q = j; q; q--)
              if (dp(dp2, q, j, ch)) minto(g[i][j], g[p - 1][q - 1] + 1);
  printf("%d\n", g[n][m] == inf ? -1 : g[n][m]);
  return 0;
}
