#include <bits/stdc++.h>
using namespace std;
char s[55];
int maps[26][26];
int maskA[55][55];
int maskB[55][55];
int dp[55][55];
int x[55], y[55], z[55];
int GetChar(char c) { return c - 'a'; }
void PrintMask(int x, int y, int mask) {
  printf("i = %d j = %d ", x, y);
  for (int(i) = 0; (i) < (26); (i)++) {
    if (mask & (1 << i)) {
      printf("%c ", (char)(i + 'a'));
    }
  }
  printf("\n");
}
int main(void) {
  scanf("%s", &s);
  string a = (string)s;
  scanf("%s", &s);
  string b = (string)s;
  int n;
  scanf("%d", &n);
  memset((maps), (0), sizeof((maps)));
  for (int(i) = 0; (i) < (n); (i)++) {
    scanf("%s", &s);
    x[i] = 1 << GetChar(s[3]);
    y[i] = 1 << GetChar(s[4]);
    z[i] = 1 << GetChar(s[0]);
  }
  int szA = (int)(a).size();
  int szB = (int)(b).size();
  memset((maskA), (0), sizeof((maskA)));
  memset((maskB), (0), sizeof((maskB)));
  for (int(i) = 0; (i) < (szA); (i)++) {
    maskA[i][i] |= (1 << GetChar(a[i]));
  }
  for (int(i) = (2); (i) < (szA + 1); (i)++) {
    for (int(j) = 0; (j) < (szA - i + 1); (j)++) {
      int right = j + i - 1;
      for (int(k) = (j); (k) < (right); (k)++) {
        for (int(l) = 0; (l) < (n); (l)++) {
          if ((maskA[j][k] & x[l]) && (maskA[k + 1][right] & y[l])) {
            maskA[j][right] |= z[l];
          }
        }
      }
    }
  }
  for (int(i) = 0; (i) < (szB); (i)++) {
    maskB[i][i] = (1 << GetChar(b[i]));
  }
  for (int(i) = (2); (i) < (szB + 1); (i)++) {
    for (int(j) = 0; (j) < (szB - i + 1); (j)++) {
      int right = j + i - 1;
      for (int(k) = (j); (k) < (right); (k)++) {
        for (int(l) = 0; (l) < (n); (l)++) {
          if ((maskB[j][k] & x[l]) && (maskB[k + 1][right] & y[l])) {
            maskB[j][right] |= z[l];
          }
        }
      }
    }
  }
  for (int(i) = 0; (i) < (szA + 1); (i)++)
    for (int(j) = 0; (j) < (szB + 1); (j)++) dp[i][j] = 55 * 2;
  dp[0][0] = 0;
  for (int(i) = (1); (i) < (szA + 1); (i)++) {
    for (int(j) = (1); (j) < (szB + 1); (j)++) {
      for (int(k) = 0; (k) < (i); (k)++) {
        for (int(l) = 0; (l) < (j); (l)++) {
          if (maskA[k][i - 1] & maskB[l][j - 1]) {
            dp[i][j] = min(dp[i][j], dp[k][l] + 1);
          }
        }
      }
    }
  }
  if (dp[szA][szB] == 55 * 2) {
    printf("-1\n");
  } else {
    printf("%d\n", dp[szA][szB]);
  }
  return 0;
}
