#include <bits/stdc++.h>
using namespace std;
const int INF = 1000;
const int maxn = 100;
const int maxc = 27;
int reach[2][maxn][maxn];
vector<string> sub[maxc];
inline int bit(int i) { return 1 << i; }
void gao(string &s, int reach[maxn][maxn]) {
  for (int i = 0; i < s.length(); i++)
    for (int j = i; j < s.length(); j++) reach[i][j] = 0;
  for (int i = 0; i < s.length(); i++) reach[i][i] = bit(s[i] - 'a');
  for (int l = 1; l < s.length(); l++)
    for (int i = 0; i + l < s.length(); i++)
      for (int a = 0; a < maxc; a++)
        for (int b = 0; b < sub[a].size(); b++)
          for (int q = i; q < i + l; q++) {
            if ((reach[i][q] & bit(sub[a][b][0] - 'a')) &&
                (reach[q + 1][i + l] & bit(sub[a][b][1] - 'a')))
              reach[i][i + l] |= bit(a);
          }
}
string s1, s2;
char seq[maxn];
int dp[maxn][maxn];
int main() {
  while (cin >> s1 >> s2) {
    for (int i = 0; i < maxc; i++) sub[i].clear();
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
      scanf("%s", seq);
      sub[seq[0] - 'a'].push_back(seq + 3);
    }
    gao(s1, reach[0]);
    gao(s2, reach[1]);
    dp[0][0] = 0;
    for (int i = 0; i <= s1.length(); i++)
      for (int j = 0; j <= s2.length(); j++) {
        if (i || j) dp[i][j] = INF;
        for (int p = 0; p < i; p++)
          for (int q = 0; q < j; q++)
            if (reach[0][p][i - 1] & reach[1][q][j - 1])
              dp[i][j] = min(dp[i][j], dp[p][q] + 1);
      }
    if (dp[s1.length()][s2.length()] != INF)
      printf("%d\n", dp[s1.length()][s2.length()]);
    else
      printf("-1\n");
  }
}
