#include <bits/stdc++.h>
constexpr int MAXC = 30, INF = 1e9;
using namespace std;
int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  string a, b, sol;
  char c1, c2;
  int i, j, k = 0, n, w, d[MAXC][MAXC], c = 0, cost;
  cin >> a >> b;
  cin >> n;
  fill(*d, *d + MAXC * MAXC, INF);
  for (i = 0; i < MAXC; ++i) d[i][i] = 0;
  while (n--) {
    cin >> c1 >> c2 >> w;
    d[c1 - 'a'][c2 - 'a'] = min(d[c1 - 'a'][c2 - 'a'], w);
  }
  for (k = 0; k < MAXC; ++k)
    for (i = 0; i < MAXC; ++i)
      for (j = 0; j < MAXC; ++j) d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
  if (a.size() != b.size()) {
    cout << "-1\n";
  } else {
    for (i = 0; i < a.size(); ++i) {
      int curD, bD = INF, bCh;
      for (int ch = 0; ch < MAXC; ++ch) {
        if ((curD = d[a[i] - 'a'][ch] + d[b[i] - 'a'][ch]) < bD) {
          bD = curD;
          bCh = ch;
        }
      }
      if (bD == INF) {
        cout << "-1\n";
        return 0;
      }
      c += bD;
      sol += bCh + 'a';
    }
    cout << c << "\n" << sol << "\n";
  }
  return 0;
}
