#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long f = 1, sum = 0;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    sum = sum * 10 + c - '0';
    c = getchar();
  }
  return sum * f;
}
const int MAXN = 55;
const int CHARSET = 26;
char s1[MAXN], s2[MAXN];
int f[MAXN][MAXN], ga[MAXN][MAXN][CHARSET], gb[MAXN][MAXN][CHARSET];
char a[MAXN], b1[MAXN], b2[MAXN];
int main() {
  scanf("%s", s1 + 1);
  scanf("%s", s2 + 1);
  int len1 = strlen(s1 + 1), len2 = strlen(s2 + 1);
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    char c[10];
    scanf("%s", c + 1);
    a[i] = c[1];
    b1[i] = c[4], b2[i] = c[5];
  }
  for (int len = 1; len <= len1; len++)
    for (int i = 1; i <= len1 - len + 1; i++)
      for (int c = 0; c < CHARSET; c++) {
        char ch = (char)c + 'a';
        if (len == 1) {
          if (s1[i] == ch) ga[i][i][c] = true;
          continue;
        }
        for (int j = i; j < i + len - 1; j++)
          for (int num = 1; num <= n; num++)
            if (a[num] == ch && ga[i][j][b1[num] - 'a'] &&
                ga[j + 1][i + len - 1][b2[num] - 'a'])
              ga[i][i + len - 1][c] = true;
      }
  for (int len = 1; len <= len2; len++)
    for (int i = 1; i <= len2 - len + 1; i++)
      for (int c = 0; c < CHARSET; c++) {
        char ch = (char)c + 'a';
        if (len == 1) {
          if (s2[i] == ch) gb[i][i][c] = true;
          continue;
        }
        for (int j = i; j < i + len - 1; j++)
          for (int num = 1; num <= n; num++)
            if (a[num] == ch && gb[i][j][b1[num] - 'a'] &&
                gb[j + 1][i + len - 1][b2[num] - 'a'])
              gb[i][i + len - 1][c] = true;
      }
  for (int i = 1; i <= len1; i++) {
    for (int j = 1; j <= len2; j++) {
      f[i][j] = 0x3f3f3f3f;
      for (int c = 0; c < CHARSET; c++)
        if (ga[1][i][c] && gb[1][j][c]) f[i][j] = 1;
      for (int lasti = 1; lasti < i; lasti++)
        for (int lastj = 1; lastj < j; lastj++)
          for (int ch = 0; ch < CHARSET; ch++)
            if (ga[lasti + 1][i][ch] && gb[lastj + 1][j][ch])
              f[i][j] = min(f[i][j], f[lasti][lastj] + 1);
    }
  }
  if (f[len1][len2] != 0x3f3f3f3f)
    cout << f[len1][len2];
  else
    cout << -1;
  return 0;
}
