#include <bits/stdc++.h>
using namespace std;
const int INT_INF = 0x3fffffff;
bool compress[2][60][60][30];
char s[2][60], substitution[60][10];
int f[60][60], n, len[2];
void init(int id) {
  len[id] = (int)strlen(s[id]);
  for (int i = 0; i < len[id]; i++) compress[id][i][i][s[id][i] - 'a'] = 1;
  for (int L = 1; L <= len[id]; L++)
    for (int st = 0, en = st + L - 1; en < len[id]; st++, en++) {
      for (int mid = st; mid < en; mid++)
        for (int i = 0; i < n; i++)
          if (compress[id][st][mid][substitution[i][3] - 'a'] &&
              compress[id][mid + 1][en][substitution[i][4] - 'a'])
            compress[id][st][en][substitution[i][0] - 'a'] = 1;
    }
}
int main() {
  scanf("%s%s%d", s[0], s[1], &n);
  for (int i = 0; i < n; i++) scanf("%s", substitution[i]);
  memset(compress, 0, sizeof(compress));
  init(0), init(1);
  for (int i = 0; i <= len[0]; i++)
    for (int j = 0; j <= len[1]; j++) f[i][j] = INT_INF;
  f[0][0] = 0;
  for (int mid0 = 0; mid0 < len[0]; mid0++)
    for (int mid1 = 0; mid1 < len[1]; mid1++)
      for (int st0 = mid0; st0 < len[0]; st0++)
        for (int st1 = mid1; st1 < len[1]; st1++)
          for (int ch = 0; ch < 26; ch++)
            if (compress[0][mid0][st0][ch] && compress[1][mid1][st1][ch])
              f[st0 + 1][st1 + 1] = min(f[st0 + 1][st1 + 1], f[mid0][mid1] + 1);
  int ans = f[len[0]][len[1]];
  if (ans == INT_INF) ans = -1;
  printf("%d\n", ans);
  return 0;
}
