#include <bits/stdc++.h>
using namespace std;
const int MAXN = 52;
const int Sigma = 26;
const int INF = 1e9 + 10;
vector<pair<int, int> > z[Sigma];
int dp[MAXN][MAXN];
bool dps[Sigma][MAXN][MAXN];
bool dpt[Sigma][MAXN][MAXN];
int main() {
  ios_base ::sync_with_stdio(false);
  cin.tie(0);
  string s, t;
  cin >> s >> t;
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    string e;
    cin >> e;
    z[e[0] - 'a'].push_back(make_pair(e[3] - 'a', e[4] - 'a'));
  }
  for (int i = 0; i < Sigma; i++) {
    for (int j = 0; j < s.size(); j++) {
      dps[i][j][j] = (i == s[j] - 'a');
    }
  }
  for (int i = 1; i < s.size(); i++) {
    for (int j = 0; j + i < s.size(); j++) {
      int r = j + i;
      for (int w = 0; w < Sigma; w++) {
        for (int d = 0; d < z[w].size(); d++) {
          for (int k = j; k < r; k++) {
            dps[w][j][r] |=
                (dps[z[w][d].first][j][k] & dps[z[w][d].second][k + 1][r]);
          }
        }
      }
    }
  }
  for (int i = 0; i < Sigma; i++) {
    for (int j = 0; j < t.size(); j++) {
      dpt[i][j][j] = (i == t[j] - 'a');
    }
  }
  for (int i = 1; i < t.size(); i++) {
    for (int j = 0; j + i < t.size(); j++) {
      int r = j + i;
      for (int w = 0; w < Sigma; w++) {
        for (int d = 0; d < z[w].size(); d++) {
          for (int k = j; k < r; k++) {
            dpt[w][j][r] |=
                (dpt[z[w][d].first][j][k] & dpt[z[w][d].second][k + 1][r]);
          }
        }
      }
    }
  }
  for (int i = 0; i < MAXN; i++) {
    for (int j = 0; j < MAXN; j++) {
      dp[i][j] = INF;
    }
  }
  dp[0][0] = 0;
  for (int i = 1; i <= s.size(); i++) {
    for (int j = 1; j <= t.size(); j++) {
      for (int w = 0; w < Sigma; w++) {
        for (int e = 1; e <= i; e++) {
          for (int u = 1; u <= j; u++) {
            if (dps[w][e - 1][i - 1] && dpt[w][u - 1][j - 1]) {
              dp[i][j] = min(dp[i][j], dp[e - 1][u - 1] + 1);
            }
          }
        }
      }
    }
  }
  if (dp[s.size()][t.size()] == INF) {
    cout << -1;
  } else {
    cout << dp[s.size()][t.size()];
  }
}
