#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
const long long N = 3e5 + 5;
const long long INF = 1e14;
void floydWarshall(vector<vector<long long> > &d, long long n) {
  for (long long k = 0; k < n; k++) {
    for (long long i = 0; i < n; i++) {
      for (long long j = 0; j < n; j++) {
        if (d[i][k] + d[k][j] < d[i][j]) {
          d[i][j] = d[i][k] + d[k][j];
        }
      }
    }
  }
}
void solve() {
  long long n;
  string s1, s2;
  cin >> s1 >> s2;
  cin >> n;
  long long sz = 26;
  vector<vector<long long> > d(26, vector<long long>(26, INF));
  for (long long i = 0; i < n; i++) {
    char src, dest;
    long long c;
    cin >> src >> dest >> c;
    long long x = src - 'a';
    long long y = dest - 'a';
    d[x][y] = min(d[x][y], c);
  }
  for (long long i = 0; i < sz; i++) {
    d[i][i] = 0;
  }
  floydWarshall(d, sz);
  if (s1.length() != s2.length()) {
    cout << "-1\n";
    return;
  }
  string ans = s1;
  long long total = 0;
  for (long long i = 0; i < s1.length(); i++) {
    long long cur = INF;
    for (long long j = 0; j < sz; j++) {
      long long c1 = s1[i] - 'a', c2 = s2[i] - 'a';
      if (d[c1][j] + d[c2][j] < cur) {
        cur = d[c1][j] + d[c2][j];
        ans[i] = 'a' + j;
      }
    }
    if (cur == INF) {
      cout << "-1\n";
      return;
    }
    total += cur;
  }
  cout << total << "\n";
  cout << ans << "\n";
}
int main() {
  ios::sync_with_stdio(false);
  int t;
  for (long long i = 0; i < 1; i++) {
    solve();
  }
  return 0;
}
