#include <bits/stdc++.h>
using namespace std;
void dout() { cerr << '\n'; }
template <typename Head, typename... Tail>
void dout(Head H, Tail... T) {
  cerr << " " << H;
  dout(T...);
}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int N = 53, K = 26, inf = 1e9;
string s[2];
int n, dp[N][N], f[2][K][N][N];
vector<pair<int, int> > vec[26];
int get(int id, int c, int l, int r) {
  int& res = f[id][c][l][r];
  if (res != -1) {
    return res;
  }
  if (l == r && c == s[id][l - 1] - 'a') {
    res = 1;
  } else {
    res = 0;
    for (auto i : vec[c]) {
      for (int j = l; j < r; j++) {
        res |= (get(id, i.first, l, j) & get(id, i.second, j + 1, r));
      }
    }
  }
  return res;
}
int solve(int i, int j) {
  int& res = dp[i][j];
  if (res != -1) {
    return res;
  }
  res = inf;
  for (int c = 0; c < 26; c++) {
    for (int k = 0; k < i; k++) {
      for (int l = 0; l < j; l++) {
        if (get(0, c, k + 1, i) & get(1, c, l + 1, j)) {
          res = min(res, solve(k, l) + 1);
        }
      }
    }
  }
  return res;
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(NULL);
  memset(&dp, -1, sizeof(dp));
  dp[0][0] = 0;
  memset(&f, -1, sizeof(f));
  cin >> s[0] >> s[1] >> n;
  string t;
  for (int i = 0; i < n; i++) {
    cin >> t;
    vec[t[0] - 'a'].push_back({t[3] - 'a', t[4] - 'a'});
  }
  int ans = solve((int)(s[0]).size(), (int)(s[1]).size());
  if (ans == inf) {
    cout << -1;
  } else {
    cout << ans;
  }
}
