#include <bits/stdc++.h>
using namespace std;
const int MAXL = 51;
int str1[MAXL][MAXL], str2[MAXL][MAXL], dp[MAXL][MAXL], matr[26][26], n;
void dpf(string str, int arr[MAXL][MAXL]) {
  int s = str.size();
  for (int i = 0; i < s; i++) arr[i][i] |= 1 << (str[i] - 'a');
  for (int len = 2; len <= s; len++)
    for (int npos = 0; npos <= s - len; npos++)
      for (int mid = npos + 1; mid < npos + len; mid++)
        for (int i = 0; i < 26; i++)
          for (int j = 0; j < 26; j++)
            if ((arr[npos][mid - 1] & 1 << i) &&
                (arr[mid][npos + len - 1] & 1 << j))
              arr[npos][npos + len - 1] |= matr[i][j];
}
int main() {
  string s1, s2;
  cin >> s1 >> s2;
  cin >> n;
  for (int i = 0; i < n; i++) {
    string t;
    cin >> t;
    matr[t[3] - 'a'][t[4] - 'a'] |= 1 << (t[0] - 'a');
  }
  dpf(s1, str1);
  dpf(s2, str2);
  for (int i = 0; i < MAXL; i++)
    for (int j = 0; j < MAXL; j++)
      if (i || j) dp[i][j] = 100500;
  for (int pos1 = 1; pos1 <= s1.size(); pos1++)
    for (int pos2 = 1; pos2 <= s2.size(); pos2++)
      for (int mid1 = 1; mid1 <= pos1; mid1++)
        for (int mid2 = 1; mid2 <= pos2; mid2++)
          if (str1[mid1 - 1][pos1 - 1] & str2[mid2 - 1][pos2 - 1])
            dp[pos1][pos2] = min(dp[pos1][pos2], dp[mid1 - 1][mid2 - 1] + 1);
  if (dp[s1.size()][s2.size()] == 100500)
    cout << -1;
  else
    cout << dp[s1.size()][s2.size()];
  return 0;
}
