#include <bits/stdc++.h>
using namespace std;
char s[55];
int n, m, dp[2][55][55], f[55][55];
int cnt, st[55], de[2][55];
void solve(int r[55][55], int siz) {
  for (int i = 1; i < siz; i++)
    for (int j = 0; j < siz - i; j++)
      for (int k = j; k < j + i; k++)
        for (int p = 1; p <= cnt; p++)
          if ((r[j][k] & (1 << de[0][p])) &&
              (r[k + 1][j + i] & (1 << de[1][p])))
            r[j][j + i] |= (1 << st[p]);
}
int main() {
  scanf("%s", s);
  n = strlen(s);
  for (int i = 0; i < n; i++) dp[0][i][i] |= (1 << (s[i] - 'a'));
  scanf("%s", s);
  m = strlen(s);
  for (int i = 0; i < m; i++) dp[1][i][i] |= (1 << (s[i] - 'a'));
  scanf("%d", &cnt);
  for (int i = 1; i <= cnt; i++) {
    scanf("%s", s);
    st[i] = s[0] - 'a';
    de[0][i] = s[3] - 'a';
    de[1][i] = s[4] - 'a';
  }
  solve(dp[0], n);
  solve(dp[1], m);
  memset(f, 0x3f, sizeof f);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      for (int k = 0; k <= i; k++)
        for (int p = 0; p <= j; p++)
          if (dp[0][k][i] & dp[1][p][j]) {
            if (k && p)
              f[i][j] = min(f[i][j], f[k - 1][p - 1] + 1);
            else if (!k && !p)
              f[i][j] = 1;
          }
  if (f[n - 1][m - 1] == 0x3f3f3f3f) f[n - 1][m - 1] = -1;
  printf("%d\n", f[n - 1][m - 1]);
}
