#include <bits/stdc++.h>
using namespace std;
int ta[55][55][26], tb[55][55][26];
int na, nb, m;
vector<pair<char, char> > mk[26];
int f[55][55];
char sa[55], sb[55];
void init(char s[], int f[][55][26]) {
  int n = strlen(s + 1);
  for (int i = 1; i <= n; ++i) f[i][i][s[i] - 'a'] = 1;
  for (int r = 1; r <= n; ++r)
    for (int i = 1; i + r <= n; ++i) {
      int j = i + r;
      for (int c = 0; c < 26; ++c)
        for (int u = 0; u < mk[c].size() && !f[i][j][c]; ++u) {
          int px = mk[c][u].first, py = mk[c][u].second;
          for (int k = i; k < j; ++k)
            if (f[i][k][px] && f[k + 1][j][py]) f[i][j][c] = 1;
        }
    }
}
void checkmin(int &x, int y) {
  if (x > y) x = y;
}
int main() {
  scanf("%s", sa + 1);
  scanf("%s", sb + 1);
  scanf("%d", &m);
  for (int i = 1; i <= m; ++i) {
    char e, ex, ey;
    scanf(" %c->%c%c", &e, &ex, &ey);
    mk[e - 'a'].push_back(make_pair(ex - 'a', ey - 'a'));
  }
  init(sa, ta);
  init(sb, tb);
  na = strlen(sa + 1), nb = strlen(sb + 1);
  for (int i = 0; i <= na; ++i)
    for (int j = 0; j <= nb; ++j) f[i][j] = 1000000000;
  f[0][0] = 0;
  for (int i = 0; i <= na; ++i)
    for (int j = 0; j <= nb; ++j) {
      if (f[i][j] == 1000000000) continue;
      for (int c = 0; c < 26; ++c)
        for (int ni = i + 1; ni <= na; ++ni)
          if (ta[i + 1][ni][c])
            for (int nj = j + 1; nj <= nb; ++nj)
              if (tb[j + 1][nj][c]) checkmin(f[ni][nj], f[i][j] + 1);
    }
  if (f[na][nb] < 1000000000)
    printf("%d\n", f[na][nb]);
  else
    puts("-1");
}
