#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
inline void amin(T &x, U y) {
  if (y < x) x = y;
}
template <typename T, typename U>
inline void amax(T &x, U y) {
  if (x < y) x = y;
}
long long powmod(long long a, long long b) {
  long long res = 1;
  a %= 1000000007;
  assert(b >= 0);
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % 1000000007;
    a = a * a % 1000000007;
  }
  return res;
}
string s1, s2;
long long n, m, q;
long long dp[51][51];
long long t[50][3];
long long dp1[51][51][26];
long long dp2[51][51][26];
void pre() {
  memset(dp1, -1, sizeof(dp1));
  memset(dp2, -1, sizeof(dp2));
  for (int i = 1; i < n + 1; i++) {
    for (int j = 1; j < n - i + 2; j++) {
      long long st = j;
      long long en = i + j - 1;
      if (i == 1)
        dp1[st][en][(s1[st - 1] - 'a')] = 1;
      else {
        for (int k = st; k < en; k++) {
          for (int l = 0; l < q; l++) {
            if (dp1[st][k][t[l][0]] == 1 && dp1[k + 1][en][t[l][1]] == 1)
              dp1[st][en][t[l][2]] = 1;
          }
        }
      }
    }
  }
  for (int i = 1; i < m + 1; i++) {
    for (int j = 1; j < m - i + 2; j++) {
      long long st = j;
      long long en = i + j - 1;
      if (i == 1)
        dp2[st][en][(s2[st - 1] - 'a')] = 1;
      else {
        for (int k = st; k < en; k++) {
          for (int l = 0; l < q; l++) {
            if (dp2[st][k][t[l][0]] == 1 && dp2[k + 1][en][t[l][1]] == 1)
              dp2[st][en][t[l][2]] = 1;
          }
        }
      }
    }
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(NULL);
  cin >> s1 >> s2;
  cin >> q;
  n = ((s1).size());
  m = ((s2).size());
  for (int i = 0; i < q; i++) {
    string temp;
    cin >> temp;
    t[i][0] = temp[3] - 'a';
    t[i][1] = temp[4] - 'a';
    t[i][2] = temp[0] - 'a';
  }
  pre();
  memset(dp, -1, sizeof(dp));
  dp[0][0] = 0;
  for (int i = 1; i < n + 1; i++) {
    for (int j = 1; j < m + 1; j++) {
      for (int k = 0; k < i; k++) {
        for (int l = 0; l < j; l++) {
          if (dp[k][l] != -1) {
            long long temp = -1;
            for (int d = 0; d < 26; d++) {
              if (dp1[k + 1][i][d] == 1 && dp2[l + 1][j][d] == 1) temp = 1;
            }
            if (temp == 1) temp += dp[k][l];
            if (temp != -1 && dp[i][j] != -1)
              amin(dp[i][j], temp);
            else if (temp != -1 && dp[i][j] == -1)
              dp[i][j] = temp;
          }
        }
      }
    }
  }
  cout << dp[n][m];
  return 0;
}
