#include <bits/stdc++.h>
using namespace std;
const long long inf = ~0ull / 4;
const long long maxn = 210000;
bool can[2][30][60][60];
bool ev[30][800];
long long dp[60][60];
vector<string> v[30];
int32_t main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  string s[2];
  cin >> s[0] >> s[1];
  long long n;
  cin >> n;
  for (long long i = 0; i < n; i++) {
    string t;
    cin >> t;
    long long ind = (t[3] - 'a') * 26 + (t[4] - 'a');
    ev[t[0] - 'a'][ind] = 1;
  }
  for (long long t = 0; t < 2; t++) {
    for (long long i = 0; i < s[t].length(); i++)
      can[t][s[t][i] - 'a'][i][i] = 1;
    for (long long d = 1; d < s[t].length(); d++) {
      for (long long i = 0; i < s[t].length(); i++) {
        long long j = i + d;
        if (j >= s[t].length()) break;
        for (long long g = i; g < j; g++)
          for (long long b = 0; b < 26; b++)
            for (long long c = 0; c < 26; c++)
              if (can[t][b][i][g] and can[t][c][g + 1][j])
                for (long long a = 0; a < 26; a++)
                  if (ev[a][b * 26 + c]) can[t][a][i][j] = 1;
      }
    }
  }
  for (long long i = 0; i < s[0].length(); i++) {
    for (long long j = 0; j < s[1].length(); j++) {
      long long t = maxn;
      for (long long g = 0; g < i + 1; g++)
        for (long long r = 0; r < j + 1; r++) {
          long long I = i - g;
          long long J = j - r;
          for (long long a = 0; a < 26; a++) {
            if (!can[0][a][I][i] or !can[1][a][J][j]) continue;
            if (!I and !J)
              t = min(t, 1ll);
            else if (I and J)
              t = min(t, 1 + dp[I - 1][J - 1]);
          }
        }
      dp[i][j] = t;
    }
  }
  long long ans = dp[s[0].length() - 1][s[1].length() - 1];
  if (ans == maxn) ans = -1;
  cout << ans << "\n";
  return 0;
}
