#include <bits/stdc++.h>
using namespace std;
const int N = 60;
int change[N][3];
char st[2][N];
int lens[2];
int dp[2][N][N];
int ans[N][N];
int n;
const int inf = 10000000;
int findans(int a, int b) {
  if (a == lens[0] && b == lens[1]) return 0;
  if (a == lens[0] || b == lens[1]) return inf;
  if (ans[a][b] != -1) return ans[a][b];
  ans[a][b] = inf;
  for (int i = a; i < lens[0]; ++i)
    for (int j = b; j < lens[1]; ++j)
      if (dp[0][a][i] & dp[1][b][j])
        ans[a][b] = min(findans(i + 1, j + 1) + 1, ans[a][b]);
  return ans[a][b];
}
int main() {
  char temp[3];
  scanf("%s%s", st[0], st[1]);
  scanf("%d", &n);
  memset(dp, 0, sizeof(dp));
  for (int i = 0; i < n; ++i) {
    scanf(" %c->%c%c", temp, temp + 1, temp + 2);
    for (int j = 0; j < 3; ++j) change[i][j] = 1 << (temp[j] - 'a');
  }
  for (int i = 0; i < 2; ++i) {
    lens[i] = strlen(st[i]);
    for (int j = 0; j < lens[i]; ++j) dp[i][j][j] = 1 << (st[i][j] - 'a');
    for (int j = 0; j < lens[i]; ++j)
      for (int k = 0; k + j < lens[i]; ++k)
        for (int l = 0; l < j; ++l)
          for (int r = 0; r < n; ++r)
            if ((dp[i][k][k + l] & change[r][1]) &&
                (dp[i][k + l + 1][k + j] & change[r][2]))
              dp[i][k][k + j] |= change[r][0];
  }
  memset(ans, -1, sizeof(ans));
  findans(0, 0);
  if (ans[0][0] >= inf)
    puts("-1");
  else
    printf("%d\n", ans[0][0]);
  return 0;
}
