#include <bits/stdc++.h>
using namespace std;
namespace zzc {
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + ch - 48;
    ch = getchar();
  }
  return x * f;
}
int n;
bool f[2][55][55][26];
int g[55][55], s[2][55], length[2];
char ch[55];
vector<pair<int, int> > c[26];
void work() {
  for (int id = 0; id <= 1; id++) {
    scanf("%s", ch + 1);
    n = strlen(ch + 1);
    length[id] = n;
    for (int i = 1; i <= n; i++) s[id][i] = ch[i] - 'a';
  }
  n = read();
  for (int i = 1; i <= n; i++) {
    scanf("%s", ch + 1);
    c[ch[1] - 'a'].push_back(make_pair(ch[4] - 'a', ch[5] - 'a'));
  }
  for (int id = 0; id <= 1; id++) {
    for (int i = 1; i <= length[id]; i++) f[id][i][i][s[id][i]] = true;
    for (int len = 1; len <= length[id]; len++)
      for (int l = 1, r; l + len - 1 <= length[id]; l++) {
        r = l + len - 1;
        for (int mid = l; mid < r; mid++)
          for (int k = 0; k <= 25; k++)
            for (auto x : c[k])
              f[id][l][r][k] |=
                  (f[id][l][mid][x.first] && f[id][mid + 1][r][x.second]);
      }
  }
  memset(g, 0x3f, sizeof(g));
  g[0][0] = 0;
  for (int i = 1; i <= length[0]; i++)
    for (int j = 1; j <= length[1]; j++)
      for (int x = 1; x <= i; x++)
        for (int y = 1; y <= j; y++)
          for (int k = 0; k <= 25; k++)
            if (f[0][x][i][k] && f[1][y][j][k])
              g[i][j] = min(g[i][j], g[x - 1][y - 1] + 1);
  if (g[length[0]][length[1]] > 50) g[length[0]][length[1]] = -1;
  printf("%d\n", g[length[0]][length[1]]);
}
}  // namespace zzc
int main() {
  zzc::work();
  return 0;
}
