#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > adj[27];
const int inf = 100000000;
const int maxn = 60;
int can[3][maxn][maxn][27], u[3][maxn][maxn][27];
char a[maxn], b[maxn];
int opt[maxn][maxn];
string s[3];
int n, m, k;
void dp(int w, int x, int y, int ch) {
  if (u[w][x][y][ch]) return;
  u[w][x][y][ch] = 1;
  if (x == y) {
    can[w][x][y][ch] = (s[w][x - 1] - 96 == ch);
    return;
  }
  can[w][x][y][ch] = 0;
  for (int i = 0; i < adj[ch].size(); i++)
    for (int k = x; k < y; k++) {
      dp(w, x, k, adj[ch][i].first);
      dp(w, k + 1, y, adj[ch][i].second);
      if (can[w][x][k][adj[ch][i].first] &&
          can[w][k + 1][y][adj[ch][i].second]) {
        can[w][x][y][ch] = 1;
        return;
      }
    }
}
int main() {
  cin >> s[1] >> s[2];
  n = s[1].size();
  m = s[2].size();
  cin >> k;
  for (int i = 1; i <= 26; i++) adj[i].clear();
  for (int i = 1; i <= k; i++) {
    string s;
    cin >> s;
    adj[s[0] - 96].push_back(make_pair(s[3] - 96, s[4] - 96));
  }
  memset(can, 0, sizeof(can));
  memset(u, 0, sizeof(u));
  for (int i = 1; i <= 26; i++) {
    for (int x = 1; x <= n; x++)
      for (int y = x; y <= n; y++) dp(1, x, y, i);
    for (int x = 1; x <= m; x++)
      for (int y = x; y <= m; y++) dp(2, x, y, i);
  }
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= m; j++) opt[i][j] = inf;
  opt[0][0] = 0;
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= m; j++)
      if (opt[i][j] != inf)
        for (int x = i + 1; x <= n; x++)
          for (int y = j + 1; y <= m; y++) {
            int Can = 0;
            for (int ch = 1; ch <= 26; ch++)
              if (can[1][i + 1][x][ch] && can[2][j + 1][y][ch]) {
                Can = 1;
                break;
              }
            if (Can) opt[x][y] = min(opt[x][y], opt[i][j] + 1);
          }
  if (opt[n][m] == inf)
    cout << -1 << endl;
  else
    cout << opt[n][m] << endl;
  return 0;
}
