#include <bits/stdc++.h>
using namespace std;
void read(long long &x) {
  x = 0;
  long long f = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -f;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = (x << 1) + (x << 3) + c - '0';
    c = getchar();
  }
  x *= f;
  return;
}
long long fs(long long x) { return x < 0 ? -x : x; }
void print(long long x) {
  if (x < 10) {
    putchar(x + '0');
    return;
  }
  print(x / 10);
  putchar(x % 10 + '0');
  return;
}
void write(long long x) {
  if (x < 0) {
    putchar('-');
    x = fs(x);
  }
  print(x);
  return;
}
long long mint(long long x, long long y) { return x < y ? x : y; }
long long maxt(long long x, long long y) { return x > y ? x : y; }
vector<pair<int, int> > vec[205];
char a[205], b[205];
bool pre1[205][205][205], pre2[205][205][205];
long long lena, lenb, n, dp[205][205];
void inti() {
  for (int i = 1; i <= lena; i++) pre1[i][i][a[i]] = 1;
  for (int i = 1; i <= lenb; i++) pre2[i][i][b[i]] = 1;
  for (int len = 2; len <= lena; len++)
    for (int l = 1; l + len - 1 <= lena; l++) {
      long long r = l + len - 1;
      for (long long ch = 'a'; ch <= 'z'; ch++)
        for (int k = l; k < r; k++)
          for (int p = 0; p < vec[ch].size(); p++)
            pre1[l][r][ch] |= pre1[l][k][vec[ch][p].first] &
                              pre1[k + 1][r][vec[ch][p].second];
    }
  for (int len = 2; len <= lenb; len++)
    for (int l = 1; l + len - 1 <= lenb; l++) {
      long long r = l + len - 1;
      for (long long ch = 'a'; ch <= 'z'; ch++)
        for (int k = l; k < r; k++)
          for (int p = 0; p < vec[ch].size(); p++)
            pre2[l][r][ch] |= pre2[l][k][vec[ch][p].first] &
                              pre2[k + 1][r][vec[ch][p].second];
    }
  for (int i = 0; i <= lena; i++)
    for (int j = 0; j <= lenb; j++) dp[i][j] = 0x3f3f3f3f3f3f3f;
  dp[0][0] = 0;
  return;
}
int main() {
  scanf("%s", a + 1);
  scanf("%s", b + 1);
  lena = strlen(a + 1);
  lenb = strlen(b + 1);
  read(n);
  for (int i = 1; i <= n; i++) {
    char c1, c2;
    while (!isalpha(c1 = getchar()))
      ;
    while (!isalpha(c2 = getchar()))
      ;
    vec[c1].push_back(pair<long long, long long>(c2, getchar()));
  }
  inti();
  for (int i = 1; i <= lena; i++)
    for (int j = 1; j <= lenb; j++)
      for (int i1 = 1; i1 <= i; i1++)
        for (int j1 = 1; j1 <= j; j1++)
          for (int ch = 'a'; ch <= 'z'; ch++)
            if (pre1[i1][i][ch] && pre2[j1][j][ch])
              dp[i][j] = mint(dp[i][j], dp[i1 - 1][j1 - 1] + 1);
  if (dp[lena][lenb] == 0x3f3f3f3f3f3f3f)
    puts("-1");
  else
    printf("%lld", dp[lena][lenb]);
}
