#include <bits/stdc++.h>
using namespace std;
const int maxn = 55, W = 30;
bool dp[W][maxn][maxn], odp[W][maxn][maxn];
vector<string> adj[W];
void build(string s) {
  memset(dp, 0, sizeof dp);
  int n = s.size();
  for (int len = 1; len <= n; len++) {
    for (int i = 0; i < 26; i++) {
      for (int l = 0; l + len <= n; l++) {
        int r = l + len;
        if (len == 1) {
          dp[i][l][r] = (s[l] - 'a' == i);
          continue;
        }
        for (auto t : adj[i]) {
          int fir = t[0] - 'a', sec = t[1] - 'a';
          for (int mid = l + 1; mid < r; mid++)
            dp[i][l][r] |= (dp[fir][l][mid] & dp[sec][mid][r]);
        }
      }
    }
  }
}
int can[maxn][maxn];
int main() {
  string s, t;
  cin >> s >> t;
  int q;
  cin >> q;
  for (int i = 0; i < q; i++) {
    string op;
    cin >> op;
    string t = op.substr(3, 2);
    adj[op[0] - 'a'].push_back(t);
  }
  build(s);
  memcpy(odp, dp, sizeof dp);
  build(t);
  memset(can, 63, sizeof can);
  can[0][0] = 0;
  for (int i = 1; i <= s.size(); i++) {
    for (int j = 1; j <= t.size(); j++) {
      for (int i2 = i - 1; i2 >= 0; i2--) {
        for (int j2 = j - 1; j2 >= 0; j2--) {
          for (int let = 0; let < 26; let++) {
            if (odp[let][i2][i] && dp[let][j2][j])
              can[i][j] = min(can[i][j], can[i2][j2] + 1);
          }
        }
      }
    }
  }
  int ans = can[s.size()][t.size()];
  if (ans > 100) ans = -1;
  cout << ans << endl;
}
