#include <bits/stdc++.h>
using namespace std;
const int maxn = 55;
const int inf = 1e9 + 7;
int lens, lent, n;
char s[maxn], t[maxn], tmp[maxn];
int dp1[maxn][maxn][maxn], dp2[maxn][maxn][maxn];
int dp[maxn][maxn];
vector<pair<int, int> > g[maxn];
int main() {
  scanf("%s%s%d", s, t, &n);
  for (int i = 0; i < n; i++) {
    scanf("%s", tmp);
    int a = tmp[0], b = tmp[3], c = tmp[4];
    g[a - 'a'].push_back(make_pair(b - 'a', c - 'a'));
  }
  lens = strlen(s);
  lent = strlen(t);
  for (int i = 0; i < lens; i++) dp1[i][i][s[i] - 'a'] = 1;
  for (int len = 1; len < lens; len++) {
    for (int i = 0; i + len < lens; i++) {
      int j = i + len;
      for (int c = 0; c < 26; c++) {
        for (int l = 0; l < (int)g[c].size(); l++) {
          for (int k = i; k < j; k++) {
            if (!dp1[i][k][g[c][l].first]) continue;
            if (!dp1[k + 1][j][g[c][l].second]) continue;
            dp1[i][j][c] = 1;
          }
        }
      }
    }
  }
  for (int i = 0; i < lent; i++) dp2[i][i][t[i] - 'a'] = 1;
  for (int len = 1; len < lent; len++) {
    for (int i = 0; i + len < lent; i++) {
      int j = i + len;
      for (int c = 0; c < 26; c++) {
        for (int l = 0; l < (int)g[c].size(); l++) {
          for (int k = i; k < j; k++) {
            if (!dp2[i][k][g[c][l].first]) continue;
            if (!dp2[k + 1][j][g[c][l].second]) continue;
            dp2[i][j][c] = 1;
          }
        }
      }
    }
  }
  for (int i = 0; i <= lens; i++) {
    for (int j = 0; j <= lent; j++) {
      if (!i && !j) continue;
      dp[i][j] = inf;
      for (int c = 0; c < 26; c++) {
        for (int ii = 0; ii < i; ii++) {
          for (int jj = 0; jj < j; jj++) {
            if (!dp1[ii][i - 1][c]) continue;
            if (!dp2[jj][j - 1][c]) continue;
            dp[i][j] = min(dp[i][j], dp[ii][jj] + 1);
          }
        }
      }
    }
  }
  if (dp[lens][lent] == inf)
    puts("-1");
  else
    printf("%d\n", dp[lens][lent]);
  return 0;
}
