#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:134217728")
using namespace std;
string s[2];
int n;
int a[1 << 6], b[1 << 6], c[1 << 6];
int G[2][55][55][26];
int W[2][55][55];
int dp[1 << 6][1 << 6];
int go(int x, int y) {
  if (x == s[0].size()) return y != s[1].size() ? (int)1e9 : 0;
  int& res = dp[x][y];
  if (res != -1) return res;
  res = (int)1e9;
  for (int i = x + 1; i <= s[0].size(); ++i)
    for (int j = y + 1; j <= s[1].size(); ++j)
      for (int k = 0; k < 26; ++k)
        if (G[0][x][i][k] && G[1][y][j][k]) res = min(res, 1 + go(i, j));
  return res;
}
int main() {
  cin >> s[0] >> s[1];
  cin >> n;
  for (int i = 0; i < n; ++i) {
    string buf;
    cin >> buf;
    a[i] = buf[0] - 'a';
    b[i] = buf[3] - 'a';
    c[i] = buf[4] - 'a';
  }
  for (int w = 0; w < 2; ++w) {
    for (int i = 0; i < s[w].size(); ++i) G[w][i][i + 1][s[w][i] - 'a'] = 1;
    for (int i = 2; i <= s[w].size(); ++i)
      for (int j = 0; j <= (int)s[w].size() - i; ++j)
        for (int r = 0; r < n; ++r)
          for (int k = 1; k < i; ++k)
            G[w][j][j + i][a[r]] |=
                G[w][j][j + k][b[r]] & G[w][j + k][j + i][c[r]];
  }
  memset(dp, -1, sizeof(dp));
  int res = go(0, 0);
  if (res >= (int)1e9) res = -1;
  cout << res << endl;
  return 0;
}
