#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
int dp[55][55];
bool p1[26][55][55], p2[26][55][55];
int m;
int maxi = 1e9;
char s1[55], s2[55];
char c[55], l[55], r[55];
signed main() {
  scanf("%s", s1 + 1);
  int l1 = strlen(s1 + 1);
  scanf("%s", s2 + 1);
  int l2 = strlen(s2 + 1);
  scanf("%d", &m);
  char s[6];
  for (int i = 1; i <= m; i++) {
    scanf("%s", s + 1);
    c[i] = s[1];
    l[i] = s[4];
    r[i] = s[5];
  }
  for (int i = 1; i <= l1; i++) {
    p1[s1[i] - 'a'][i][i] = 1;
  }
  for (int i = 1; i < l1; i++) {
    for (int tl = 1; tl <= l1 - i; tl++) {
      int tr = tl + i;
      for (int tm = tl; tm < tr; tm++) {
        for (int use = 1; use <= m; use++) {
          if (p1[l[use] - 'a'][tl][tm] && p1[r[use] - 'a'][tm + 1][tr]) {
            p1[c[use] - 'a'][tl][tr] = 1;
          }
        }
      }
    }
  }
  for (int i = 1; i <= l2; i++) {
    p2[s2[i] - 'a'][i][i] = 1;
  }
  for (int i = 1; i < l2; i++) {
    for (int tl = 1; tl <= l2 - i; tl++) {
      int tr = tl + i;
      for (int tm = tl; tm < tr; tm++) {
        for (int use = 1; use <= m; use++) {
          if (p2[l[use] - 'a'][tl][tm] && p2[r[use] - 'a'][tm + 1][tr]) {
            p2[c[use] - 'a'][tl][tr] = 1;
          }
        }
      }
    }
  }
  for (int i = 0; i <= l1; i++)
    for (int j = 0; j <= l2; j++) dp[i][j] = maxi;
  for (int i = 0; i <= l1; i++) {
    for (int j = 0; j <= l2; j++) {
      if (!i && !j) {
        dp[i][j] = 0;
        continue;
      }
      for (int i1 = 0; i1 < i; i1++) {
        for (int j1 = 0; j1 < j; j1++) {
          if (dp[i1][j1] == maxi) continue;
          for (int use = 0; use <= 25; use++) {
            if (p1[use][i1 + 1][i] && p2[use][j1 + 1][j]) {
              dp[i][j] = min(dp[i][j], dp[i1][j1] + 1);
              break;
            }
          }
        }
      }
    }
  }
  if (dp[l1][l2] != maxi) {
    cout << dp[l1][l2];
  } else
    cout << -1;
  return 0;
}
