#include <bits/stdc++.h>
using namespace std;
vector<tuple<int, int, int>> sub;
int dp[52][52];
bool f[2][52][52][26];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  string s1, s2;
  cin >> s1 >> s2;
  int sz[2] = {(int)s1.size(), (int)s2.size()};
  s1 = '#' + s1;
  s2 = '@' + s2;
  int n;
  cin >> n;
  for (int i = 0; i < n; ++i) {
    string str;
    cin >> str;
    sub.push_back({str[0] - 'a', str[3] - 'a', str[4] - 'a'});
  }
  for (int i = 1; i <= sz[0]; ++i) f[0][i][i][s1[i] - 'a'] = 1;
  for (int i = 1; i <= sz[1]; ++i) f[1][i][i][s2[i] - 'a'] = 1;
  for (int l = 2; l <= sz[0]; ++l)
    for (int i = 1, j = i + l - 1; j <= sz[0]; ++i, ++j) {
      for (auto [a, b, c] : sub)
        for (int k = i; k < j; ++k)
          f[0][i][j][a] |= f[0][i][k][b] && f[0][k + 1][j][c];
    }
  for (int l = 2; l <= sz[1]; ++l)
    for (int i = 1, j = i + l - 1; j <= sz[1]; ++i, ++j) {
      for (auto [a, b, c] : sub)
        for (int k = i; k < j; ++k)
          f[1][i][j][a] |= f[1][i][k][b] && f[1][k + 1][j][c];
    }
  for (int i = 0; i <= sz[0]; ++i)
    for (int j = 0; j <= sz[1]; ++j) dp[i][j] = 1e9;
  dp[0][0] = 0;
  for (int i = 1; i <= sz[0]; ++i)
    for (int j = 1; j <= sz[1]; ++j)
      for (int a = 0; a < i; ++a)
        for (int b = 0; b < j; ++b)
          for (int k = 0; k < 26; ++k)
            if (f[0][a + 1][i][k] and f[1][b + 1][j][k])
              dp[i][j] = min(dp[i][j], dp[a][b] + 1);
  cout << (dp[sz[0]][sz[1]] == 1e9 ? -1 : dp[sz[0]][sz[1]]) << endl;
  return 0;
}
