#include <bits/stdc++.h>
using namespace std;
const int N = 55;
const int L = 26;
const int INF = 1e9;
int dp1[N][N][L];
int dp2[N][N][L];
int dp3[N][N];
int n;
int k[N][3];
string s1, s2;
int a[N], b[N];
int as, bs;
void calcdp1() {
  for (int r = 0; r < as; ++r) dp1[r][r][a[r]] = 1;
  for (int r = 0; r < as; ++r)
    for (int l = r - 1; l >= 0; --l)
      for (int c = l; c < r; ++c)
        for (int i = 0; i < n; ++i)
          if (dp1[l][c][k[i][1]] && dp1[c + 1][r][k[i][2]])
            dp1[l][r][k[i][0]] = 1;
}
void calcdp2() {
  for (int r = 0; r < bs; ++r) dp2[r][r][b[r]] = 1;
  for (int r = 0; r < bs; ++r)
    for (int l = r - 1; l >= 0; --l)
      for (int c = l; c < r; ++c)
        for (int i = 0; i < n; ++i)
          if (dp2[l][c][k[i][1]] && dp2[c + 1][r][k[i][2]])
            dp2[l][r][k[i][0]] = 1;
}
int main() {
  cin.sync_with_stdio(0);
  cin >> s1 >> s2 >> n;
  as = s1.size();
  bs = s2.size();
  for (int i = 0; i < as; ++i) {
    a[i] = s1[i] - 'a';
  }
  for (int i = 0; i < bs; ++i) {
    b[i] = s2[i] - 'a';
  }
  for (int i = 0; i < n; ++i) {
    string s;
    cin >> s;
    k[i][0] = s[0] - 'a';
    k[i][1] = s[3] - 'a';
    k[i][2] = s[4] - 'a';
  }
  calcdp1();
  calcdp2();
  auto get = [&](int i, int j) -> int {
    if (i >= 0 && j >= 0) return dp3[i][j];
    if (i == -1 && j == -1) return 0;
    return INF;
  };
  for (int i = 0; i < as; ++i) {
    for (int j = 0; j < bs; ++j) {
      dp3[i][j] = INF;
      for (int k = i; k >= 0; --k) {
        for (int t = j; t >= 0; --t) {
          int dp = get(k - 1, t - 1);
          if (dp == INF) continue;
          for (int symb = 0; symb < L; ++symb) {
            if (dp1[k][i][symb] && dp2[t][j][symb])
              dp3[i][j] = min(dp3[i][j], dp + 1);
          }
        }
      }
    }
  }
  if (dp3[as - 1][bs - 1] == INF) dp3[as - 1][bs - 1] = -1;
  cout << dp3[as - 1][bs - 1] << "\n";
  return 0;
}
