#include <bits/stdc++.h>
using namespace std;
inline void setmin(int &x, int y) {
  if (y < x) x = y;
}
inline void setmax(int &x, int y) {
  if (y > x) x = y;
}
inline void setmin(long long &x, long long y) {
  if (y < x) x = y;
}
inline void setmax(long long &x, long long y) {
  if (y > x) x = y;
}
const int N = 100000;
const int inf = (int)1e9 + 1;
const long long big = (long long)1e18 + 1;
const int P = 239;
const int MOD = (int)1e9 + 7;
const int MOD1 = (int)1e9 + 9;
const double eps = 1e-9;
const double pi = atan2(0, -1);
const int ABC = 26;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.precision(20);
  cout << fixed;
  string s, t;
  cin >> s >> t;
  int ls = (int)s.size(), lt = (int)t.size();
  int n;
  cin >> n;
  int a[n][3];
  for (int i = 0; i < n; i++) {
    string tmp;
    cin >> tmp;
    a[i][0] = tmp[0] - 'a';
    a[i][1] = tmp[3] - 'a';
    a[i][2] = tmp[4] - 'a';
  }
  bool dps[ls][ls][26], dpt[lt][lt][26];
  for (int i = ls - 1; i > -1; i--)
    for (int j = i; j < ls; j++)
      for (int c = 0; c < 26; c++) {
        if (i == j)
          dps[i][j][c] = (s[i] - 'a' == c);
        else {
          dps[i][j][c] = false;
          for (int r = 0; r < n; r++)
            if (a[r][0] == c)
              for (int k = i; k < j; k++)
                dps[i][j][c] |= dps[i][k][a[r][1]] & dps[k + 1][j][a[r][2]];
        }
      }
  for (int i = lt - 1; i > -1; i--)
    for (int j = i; j < lt; j++)
      for (int c = 0; c < 26; c++) {
        if (i == j)
          dpt[i][j][c] = (t[i] - 'a' == c);
        else {
          dpt[i][j][c] = false;
          for (int r = 0; r < n; r++)
            if (a[r][0] == c)
              for (int k = i; k < j; k++)
                dpt[i][j][c] |= dpt[i][k][a[r][1]] & dpt[k + 1][j][a[r][2]];
        }
      }
  int dp[ls + 1][lt + 1];
  for (int i = 0; i < ls + 1; i++)
    for (int j = 0; j < lt + 1; j++) dp[i][j] = inf;
  dp[0][0] = 0;
  for (int i = 0; i < ls; i++)
    for (int j = 0; j < lt; j++) {
      if (dp[i][j] == inf) continue;
      for (int x = i; x < ls; x++)
        for (int y = j; y < lt; y++)
          for (int c = 0; c < 26; c++)
            if (dps[i][x][c] && dpt[j][y][c])
              setmin(dp[x + 1][y + 1], dp[i][j] + 1);
    }
  cout << (dp[ls][lt] != inf ? dp[ls][lt] : -1) << "\n";
  return 0;
}
