#include <bits/stdc++.h>
using namespace std;
string s1, s2;
vector<string> v[26];
const int INF = 1e9;
bool dp1[26][51][51], dp2[26][51][51];
int cnt[51][51];
void fill(string s, bool dp[26][51][51]) {
  int len = s.size();
  for (int i = 1; i <= len; i++)
    for (int j = 0; j + i <= len; j++)
      for (int c = 0; c < 26; c++) {
        int L = j, R = j + i;
        dp[c][L][R] = false;
        if (L == R - 1) {
          dp[c][L][R] = (s[L] == 'a' + c);
          continue;
        }
        for (int k = 0; k < (int)v[c].size() && !dp[c][L][R]; k++) {
          int c1 = v[c][k][0] - 'a';
          int c2 = v[c][k][1] - 'a';
          for (int h = L + 1; h < R && !dp[c][L][R]; h++)
            dp[c][L][R] = dp[c][L][R] || (dp[c1][L][h] && dp[c2][h][R]);
        }
      }
}
int main() {
  ios::sync_with_stdio(false);
  int n;
  cin >> s1 >> s2;
  cin >> n;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    v[s[0] - 'a'].push_back(s.substr(3, 2));
  }
  fill(s1, dp1);
  fill(s2, dp2);
  int l1 = s1.size(), l2 = s2.size();
  for (int i = 0; i <= l1; i++)
    for (int j = 0; j <= l2; j++) cnt[i][j] = INF;
  cnt[l1][l2] = 0;
  for (int i = l1 - 1; i >= 0; i--)
    for (int j = l2 - 1; j >= 0; j--)
      for (int k = i + 1; k <= l1; k++)
        for (int h = j + 1; h <= l2; h++)
          for (int c = 0; c < 26; c++)
            if (dp1[c][i][k] && dp2[c][j][h])
              cnt[i][j] = min(cnt[i][j], cnt[k][h] + 1);
  if (cnt[0][0] == INF)
    cout << -1 << endl;
  else
    cout << cnt[0][0] << endl;
  return 0;
}
