#include <bits/stdc++.h>
using namespace std;
const int MAXN = 55;
const int INF = 1 << 20;
bool dp1[MAXN][MAXN][26] = {false};
bool dp2[MAXN][MAXN][26] = {false};
int dp[MAXN][MAXN];
char s1[MAXN], s2[MAXN];
string tr[MAXN];
int n;
void cal(char* s, bool f[MAXN][MAXN][26]) {
  int len = strlen(s);
  for (int i = 0; i < len; i++) {
    f[i][i][s[i] - 'a'] = true;
  }
  for (int L = 1; L <= len; L++) {
    for (int i = 0; i + L - 1 < len; i++) {
      int j = i + L - 1;
      for (int k = i; k < j; k++) {
        for (int c = 0; c < n; c++) {
          if (f[i][k][tr[c][3] - 'a'] && f[k + 1][j][tr[c][4] - 'a']) {
            f[i][j][tr[c][0] - 'a'] = true;
          }
        }
      }
    }
  }
}
int main() {
  cin >> s1 >> s2;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> tr[i];
  }
  cal(s1, dp1);
  cal(s2, dp2);
  int len1 = strlen(s1);
  int len2 = strlen(s2);
  for (int i = 0; i <= len1; i++)
    for (int j = 0; j <= len2; j++) dp[i][j] = INF;
  dp[0][0] = 0;
  for (int i = 0; i < len1; i++)
    for (int ii = i; ii < len1; ii++)
      for (int c = 0; c < 26; c++)
        if (dp1[i][ii][c])
          for (int j = 0; j < len2; j++)
            for (int jj = j; jj < len2; jj++)
              if (dp2[j][jj][c])
                dp[ii + 1][jj + 1] = min(dp[ii + 1][jj + 1], dp[i][j] + 1);
  int ans = (dp[len1][len2] == INF ? -1 : dp[len1][len2]);
  cout << ans << endl;
}
