#include <bits/stdc++.h>
using namespace std;
const int N = 55;
char s1[N], s2[N];
int n1, n2, n;
vector<int> A[26], B[26];
int ok1[N][N][26], ok2[N][N][26], f[N][N];
void slv(int& n, char s[], int ok[N][N][26]) {
  for (int i = (1); i <= (n); i++) ok[i][i][s[i] - 97] = 1;
  for (int i = (2); i <= (n); i++)
    for (int l = (1); l <= (n - i + 1); l++) {
      int r = l + i - 1;
      for (int k = (l); k <= (r - 1); k++)
        for (int c = (0); c <= (26); c++)
          for (int j = (0); j <= ((int)A[c].size() - 1); j++)
            ok[l][r][c] |= ok[l][k][A[c][j]] & ok[k + 1][r][B[c][j]];
    }
}
int main() {
  scanf("%s", s1 + 1), n1 = strlen(s1 + 1);
  scanf("%s", s2 + 1), n2 = strlen(s2 + 1);
  cin >> n;
  for (int i = (1); i <= (n); i++) {
    char c, a, b;
    scanf("\n%c->%c%c", &c, &a, &b);
    A[c - 97].push_back(a - 97), B[c - 97].push_back(b - 97);
  }
  slv(n1, s1, ok1), slv(n2, s2, ok2);
  memset(f, 0x3f, sizeof f), f[0][0] = 0;
  for (int i = (1); i <= (n1); i++)
    for (int j = (1); j <= (n2); j++)
      for (int ii = (1); ii <= (i); ii++)
        for (int jj = (1); jj <= (j); jj++)
          for (int c = (0); c <= (26); c++)
            if (ok1[ii][i][c] & ok2[jj][j][c])
              f[i][j] = min(f[i][j], f[ii - 1][jj - 1] + 1);
  return !(cout << (f[n1][n2] < 0x3f3f3f3f ? f[n1][n2] : -1));
}
