#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-9;
const int N = 55;
bool f[N][N][N];
bool d[N][N][N];
int ans[N][N];
string str1, str2, data[N];
int main() {
  while (cin >> str1 >> str2) {
    int n;
    cin >> n;
    (memset(f, 0, sizeof(f)));
    (memset(d, 0, sizeof(d)));
    for (int i = 0; i < n; ++i) cin >> data[i];
    int sz1 = str1.size();
    for (int i = 0; i < sz1; ++i) f[i][i][str1[i] - 'a'] = 1;
    for (int len = 2; len < sz1 + 1; ++len) {
      for (int i = 0; i + len - 1 < sz1; ++i) {
        int j = i + len - 1;
        for (int k = 0; k < n; ++k) {
          for (int p = i; p < j + 1; ++p) {
            if (f[i][p][data[k][3] - 'a'] && f[p + 1][j][data[k][4] - 'a']) {
              f[i][j][data[k][0] - 'a'] = 1;
              break;
            }
          }
        }
      }
    }
    int sz2 = str2.size();
    for (int i = 0; i < sz2; ++i) d[i][i][str2[i] - 'a'] = 1;
    for (int len = 2; len < sz2 + 1; ++len) {
      for (int i = 0; i + len - 1 < sz2; ++i) {
        int j = i + len - 1;
        for (int k = 0; k < n; ++k) {
          for (int p = i; p < j + 1; ++p) {
            if (d[i][p][data[k][3] - 'a'] && d[p + 1][j][data[k][4] - 'a']) {
              d[i][j][data[k][0] - 'a'] = 1;
              break;
            }
          }
        }
      }
    }
    (memset(ans, -1, sizeof(ans)));
    for (int i = 0; i < sz1; ++i) {
      for (int j = 0; j < sz2; ++j) {
        for (int k = 0; k < 26; ++k) {
          if (f[0][i][k] && d[0][j][k]) {
            ans[i][j] = 1;
            break;
          }
          for (int x = 0; x < i; ++x) {
            for (int y = 0; y < j; ++y) {
              if (ans[x][y] != -1 && f[x + 1][i][k] && d[y + 1][j][k]) {
                int p = ans[x][y] + 1;
                if (ans[i][j] == -1 || ans[i][j] > p) ans[i][j] = p;
              }
            }
          }
        }
      }
    }
    printf("%d\n", ans[sz1 - 1][sz2 - 1]);
  }
  return 0;
}
