#include <bits/stdc++.h>
using namespace std;
template <class T>
inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long tt, i, j, k, n, m, x, y, ans;
  tt = 1;
  while (tt--) {
    vector<vector<long long> > v(26, vector<long long>(26, 1000100100));
    for (long long p = 0; p < 26; p++) v[p][p] = 0;
    string s, t;
    cin >> s >> t;
    n = s.size(), m = t.size();
    if (n != m) {
      cout << -1;
      exit(0);
    }
    cin >> k;
    while (k--) {
      char a, b;
      cin >> a >> b >> x;
      chmin(v[a - 'a'][b - 'a'], x);
    }
    for (long long p = 0; p < 26; p++) {
      for (long long q = 0; q < 26; q++) {
        for (long long r = 0; r < 26; r++) {
          chmin(v[q][r], v[q][p] + v[p][r]);
        }
      }
    }
    ans = 0;
    string res = "";
    for (long long p = 0; p < n; p++) {
      long long curr = v[s[p] - 'a'][0] + v[t[p] - 'a'][0], c = 0;
      for (long long q = 1; q < 26; q++) {
        if (v[s[p] - 'a'][q] + v[t[p] - 'a'][q] < curr) {
          curr = min(curr, v[s[p] - 'a'][q] + v[t[p] - 'a'][q]);
          c = q;
        }
      }
      if (curr >= 1000100100) {
        ans = -1;
        break;
      }
      ans += curr;
      res += (char)('a' + c);
    }
    if (ans != -1)
      cout << ans << "\n" << res;
    else
      cout << ans;
  }
  return 0;
}
