#include <bits/stdc++.h>
using namespace std;
const int INF = -1u / 4;
const int MAX_N = 55;
const int MAX_C = 30;
int t[MAX_C][MAX_C];
int w[2][MAX_N][MAX_N];
int dp[MAX_N][MAX_N];
char s[2][MAX_N];
int n[2], m;
int main() {
  for (int x = 0; x < 2; x++) {
    scanf("%s", s[x]);
    n[x] = strlen(s[x]);
  }
  scanf("%d", &m);
  for (int i = 0; i < m; i++) {
    char s[10];
    scanf("%s", s);
    t[s[3] - 'a'][s[4] - 'a'] |= 1 << (s[0] - 'a');
  }
  for (int x = 0; x < 2; x++) {
    for (int sz = 1; sz <= n[x]; sz++) {
      for (int i = 0, j; (j = i + sz - 1) < n[x]; i++) {
        if (i == j) {
          w[x][i][i] |= 1 << (s[x][i] - 'a');
          continue;
        }
        for (int k = i; k < j; k++) {
          for (int c1 = 0; c1 < 26; c1++) {
            if (w[x][i][k] & (1 << c1)) {
              for (int c2 = 0; c2 < 26; c2++) {
                if (w[x][k + 1][j] & (1 << c2)) {
                  w[x][i][j] |= t[c1][c2];
                }
              }
            }
          }
        }
      }
    }
  }
  for (int i = 0; i <= n[0]; i++) {
    for (int j = 0; j <= n[1]; j++) {
      dp[i][j] = INF;
      dp[0][0] = 0;
      for (int k1 = 0; k1 < i; k1++) {
        for (int k2 = 0; k2 < j; k2++) {
          if (w[0][k1][i - 1] & w[1][k2][j - 1]) {
            dp[i][j] = min(dp[i][j], dp[k1][k2] + 1);
          }
        }
      }
    }
  }
  printf("%d\n", dp[n[0]][n[1]] == INF ? -1 : dp[n[0]][n[1]]);
}
