#include <bits/stdc++.h>
using namespace std;
vector<string> vec[26];
bool dp1[100][100][50], dp2[100][100][50];
long long ans[100][100];
int main() {
  string s, t;
  long long n;
  cin >> s >> t >> n;
  for (long long i = 0; i < n; i++) {
    string p;
    cin >> p;
    vec[p[0] - 'a'].push_back(p.substr(3));
  }
  for (long long i = 0; i < s.size(); i++) dp1[i][i][s[i] - 'a'] = true;
  for (long long i = 0; i < t.size(); i++) dp2[i][i][t[i] - 'a'] = true;
  for (long long i = 0; i < s.size(); i++)
    for (long long j = i - 1; j >= 0; j--)
      for (long long k = 0; k < 26; k++)
        for (long long h = 0; h < vec[k].size(); h++)
          for (long long l = j + 1; l <= i; l++)
            dp1[j][i][k] |= dp1[j][l - 1][vec[k][h][0] - 'a'] &
                            dp1[l][i][vec[k][h][1] - 'a'];
  for (long long i = 0; i < t.size(); i++)
    for (long long j = i - 1; j >= 0; j--)
      for (long long k = 0; k < 26; k++)
        for (long long h = 0; h < vec[k].size(); h++)
          for (long long l = j + 1; l <= i; l++)
            dp2[j][i][k] |= dp2[j][l - 1][vec[k][h][0] - 'a'] &
                            dp2[l][i][vec[k][h][1] - 'a'];
  for (long long i = 0; i <= s.size(); i++)
    for (long long j = 0; j <= t.size(); j++) ans[i][j] = 100;
  ans[0][0] = 0;
  for (long long i = 0; i <= s.size(); i++)
    for (long long j = 0; j <= t.size(); j++)
      for (long long k = 0; k < i; k++)
        for (long long h = 0; h < j; h++)
          for (long long l = 0; l < 26; l++)
            if (dp1[k][i - 1][l] & dp2[h][j - 1][l])
              ans[i][j] = min(ans[i][j], ans[k][h] + 1);
  cout << (ans[s.size()][t.size()] == 100 ? -1 : ans[s.size()][t.size()])
       << endl;
}
