#include <bits/stdc++.h>
using namespace std;
long long dp[200][200];
const long long INF = 1000000000LL;
int main() {
  for (int i = 'a'; i <= 'z'; i++)
    for (int j = 'a'; j <= 'z'; j++)
      if (i != j) dp[i][j] = INF;
  string a, b;
  cin >> a >> b;
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    char u, v;
    long long x;
    cin >> u >> v >> x;
    dp[u][v] = min(dp[u][v], x);
  }
  if (a.size() != b.size()) {
    cout << -1 << endl;
    return 0;
  }
  for (char i = 'a'; i <= 'z'; i++) dp[i][i] = 0;
  for (char k = 'a'; k <= 'z'; k++) {
    for (char i = 'a'; i <= 'z'; i++) {
      for (char j = 'a'; j <= 'z'; j++) {
        if (dp[i][k] != INF && dp[k][j] != INF)
          dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j]);
      }
    }
  }
  long long totCost = 0;
  string res;
  for (int i = 0; i < a.size(); i++) {
    char minLetra = 0;
    long long minCosto = INF;
    bool existe = false;
    for (char j = 'a'; j <= 'z'; j++) {
      if (dp[a[i]][j] != INF && dp[b[i]][j] != INF)
        if (dp[a[i]][j] + dp[b[i]][j] < minCosto) {
          existe = true;
          minCosto = dp[a[i]][j] + dp[b[i]][j];
          minLetra = j;
        }
    }
    if (!existe) {
      cout << -1 << endl;
      return 0;
    }
    res += minLetra;
    totCost += minCosto;
  }
  cout << totCost << endl;
  cout << res << endl;
  return 0;
}
