#include <bits/stdc++.h>
using namespace std;
const int INF = 1e5;
int main() {
  string s, t;
  long long cost = 0;
  int m;
  int n = 26;
  cin >> s >> t;
  int A[n][n];
  for (int _i = 0; _i < n; ++_i)
    for (int _j = 0; _j < n; ++_j) A[_i][_j] = INF;
  for (int _i = 0; _i < n; ++_i) A[_i][_i] = 0;
  cin >> m;
  string res = "";
  for (int _k = 0; _k < m; ++_k) {
    int w;
    char a, b;
    cin >> a >> b >> w;
    int _a = a - 'a';
    int _b = b - 'a';
    A[_a][_b] = min(A[_a][_b], w);
    for (int _i = 0; _i < n; ++_i)
      for (int _j = 0; _j < n; ++_j)
        A[_i][_j] = min(A[_i][_j], A[_i][_a] + A[_a][_b] + A[_b][_j]);
  }
  if (s.size() != t.size()) {
    cout << "-1";
    return 0;
  }
  for (int i = 0; i < s.size(); i++) {
    long long _min = INF;
    if (s[i] == t[i]) {
      res += s[i];
      continue;
    }
    int a = s[i] - 'a';
    int b = t[i] - 'a';
    char c;
    for (int _i = 0; _i < n; _i++) {
      if (A[a][_i] + A[b][_i] < _min) {
        _min = A[a][_i] + A[b][_i];
        c = char('a' + _i);
      }
    }
    if (_min == INF) {
      cout << "-1";
      return 0;
    }
    res += c;
    cost += _min;
  }
  cout << cost << "\n";
  cout << res;
  return 0;
}
