#include <bits/stdc++.h>
using namespace std;
vector<int> conv[26][26];
vector<vector<vector<int>>> pkek(string s) {
  int n = s.size();
  vector<vector<vector<int>>> dp(26, vector<vector<int>>(n, vector<int>(n, 0)));
  for (int len = 1; len <= n; len++) {
    for (int i = 0; i + len - 1 < n; i++) {
      if (len == 1) {
        dp[s[i] - 'a'][i][i] = 1;
        continue;
      }
      for (int pref_len = 1; pref_len < len; pref_len++) {
        for (int a = 0; a < 26; a++) {
          for (int b = 0; b < 26; b++) {
            for (int c : conv[a][b]) {
              if (dp[a][i][i + pref_len - 1] &&
                  dp[b][i + pref_len][i + len - 1]) {
                dp[c][i][i + len - 1] = 1;
              }
            }
          }
        }
      }
    }
  }
  return dp;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  string s1, s2;
  cin >> s1 >> s2;
  int t;
  cin >> t;
  for (int i = 0; i < t; i++) {
    string s;
    cin >> s;
    conv[s[3] - 'a'][s[4] - 'a'].push_back(s[0] - 'a');
  }
  auto dp1 = pkek(s1), dp2 = pkek(s2);
  int n = s1.size(), m = s2.size();
  vector<vector<int>> ans(n, vector<int>(m, 1e9));
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      for (int k = i; k < n; k++) {
        for (int l = j; l < m; l++) {
          for (int c = 0; c < 26; c++) {
            if (dp1[c][i][k] && dp2[c][j][l]) {
              if (i > 0 && j > 0) {
                ans[k][l] = min(ans[k][l], ans[i - 1][j - 1] + 1);
              } else if (i == 0 && j == 0) {
                ans[k][l] = 1;
              }
            }
          }
        }
      }
    }
  }
  cout << (ans[n - 1][m - 1] > 1e8 ? -1 : ans[n - 1][m - 1]) << '\n';
  return 0;
}
