#include <bits/stdc++.h>
using namespace std;
vector<string> cc[200];
int sel[2][200][55][55];
int ss[55][55];
char s1[2][55];
int len[2];
char buf[55];
vector<int> opt[2][55][200];
int main() {
  scanf("%s %s", s1[0], s1[1]);
  len[0] = strlen(s1[0]), len[1] = strlen(s1[1]);
  int d;
  scanf("%d", &d);
  for (int i = 0; i < d; i++) {
    scanf("%s", buf);
    string s;
    s.push_back(buf[3]), s.push_back(buf[4]);
    cc[buf[0]].push_back(s);
  }
  for (int i = 0; i < 2; i++) {
    for (int s = 0; s < len[i]; s++) {
      for (int l = 0; l <= len[i] - 1 - s; l++) {
        int r = l + s;
        for (char c = 'a'; c <= 'z'; c++) {
          auto &pos = sel[i][c][l][r] = 0;
          if (l == r) {
            if (s1[i][l] == c) pos = 1;
          } else {
            for (int d = 0; d < cc[c].size(); d++) {
              for (int k = l; k < r; k++) {
                if (sel[i][cc[c][d][0]][l][k] == 1 &&
                    sel[i][cc[c][d][1]][k + 1][r] == 1) {
                  pos = 1;
                }
              }
            }
          }
        }
      }
    }
  }
  for (int i = 0; i < 2; i++) {
    for (int l = 0; l < len[i]; l++) {
      for (char c = 'a'; c <= 'z'; c++) {
        for (int r = l; r < len[i]; r++) {
          if (sel[i][c][l][r]) opt[i][l][c].push_back(r);
        }
      }
    }
  }
  for (int i = 0; i <= len[0]; i++) {
    for (int j = 0; j <= len[1]; j++) ss[i][j] = INT_MAX;
  }
  ss[0][0] = 0;
  for (int i = 0; i <= len[0]; i++) {
    for (int j = 0; j <= len[1]; j++) {
      for (int c = 'a'; c <= 'z'; c++) {
        if (ss[i][j] == INT_MAX) continue;
        auto &v1 = opt[0][i][c], &v2 = opt[1][j][c];
        for (int a = 0; a < v1.size(); a++) {
          for (int b = 0; b < v2.size(); b++) {
            ss[v1[a] + 1][v2[b] + 1] =
                std::min(ss[v1[a] + 1][v2[b] + 1], ss[i][j] + 1);
          }
        }
      }
    }
  }
  if (ss[len[0]][len[1]] == INT_MAX)
    printf("-1\n");
  else
    printf("%d\n", ss[len[0]][len[1]]);
  return 0;
}
