#include <bits/stdc++.h>
using namespace std;
const int maxn = 50 + 5;
const int mo = 998244353;
int readint() {
  int x = 0, f = 1;
  char s = getchar();
  while (s < '0' || s > '9') {
    if (s == '-') f = -1;
    (s = getchar());
  }
  while (s >= '0' && s <= '9') {
    x = (x << 3) + (x << 1) + (s ^ 48);
    (s = getchar());
  }
  return x * f;
}
char s1[maxn], s2[maxn];
bool vis1[maxn][maxn][205], vis2[maxn][maxn][205];
vector<pair<char, char> > vec[205];
int dp[maxn][maxn];
int len1, len2;
void init() {
  len1 = strlen(s1 + 1), len2 = strlen(s2 + 1);
  for (int i = 1; i <= len1; i++) {
    vis1[i][i][s1[i]] = 1;
  }
  for (int len = 2; len <= len1; len++) {
    for (int l = 1; l + len - 1 <= len1; l++) {
      int r = l + len - 1;
      for (char s = 'a'; s <= 'z'; s++) {
        for (int k = l; k <= r; k++) {
          for (int i = 0; i < vec[s].size(); i++) {
            int c1 = vec[s][i].first, c2 = vec[s][i].second;
            if (vis1[l][k][c1] && vis1[k + 1][r][c2]) vis1[l][r][s] = 1;
          }
        }
      }
    }
  }
  for (int i = 1; i <= len2; i++) {
    vis2[i][i][s2[i]] = 1;
  }
  for (int len = 2; len <= len2; len++) {
    for (int l = 1; l + len - 1 <= len2; l++) {
      int r = l + len - 1;
      for (char s = 'a'; s <= 'z'; s++) {
        for (int k = l; k <= r; k++) {
          for (int i = 0; i < vec[s].size(); i++) {
            int c1 = vec[s][i].first, c2 = vec[s][i].second;
            if (vis2[l][k][c1] && vis2[k + 1][r][c2]) vis2[l][r][s] = 1;
          }
        }
      }
    }
  }
}
int main() {
  scanf("%s %s", s1 + 1, s2 + 1);
  int n = readint();
  for (int i = 1; i <= n; i++) {
    int c1 = getchar(), c2;
    while (c1 < 'a' || c1 > 'z') {
      c1 = getchar();
    }
    c2 = getchar();
    while (c2 < 'a' || c2 > 'z') c2 = getchar();
    vec[c1].push_back(make_pair(c2, getchar()));
  }
  init();
  for (int i = 0; i < maxn; i++)
    for (int j = 0; j < maxn; j++) dp[i][j] = 0x3f3f3f3f;
  dp[0][0] = 0;
  for (int i = 1; i <= len1; i++) {
    for (int j = 1; j <= len2; j++)
      for (int mid1 = 1; mid1 <= i; mid1++) {
        for (int mid2 = 1; mid2 <= j; mid2++) {
          for (char s = 'a'; s <= 'z'; s++) {
            if (vis1[mid1][i][s] && vis2[mid2][j][s]) {
              dp[i][j] = min(dp[i][j], dp[mid1 - 1][mid2 - 1] + 1);
            }
          }
        }
      }
  }
  if (dp[len1][len2] == 0x3f3f3f3f) {
    puts("-1");
    return 0;
  }
  cout << dp[len1][len2];
  return 0;
}
