#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e12;
const int MAX = 30;
vector<long long> adj[MAX], w[MAX];
set<pair<long long, int> > s;
long long d[MAX][MAX], p[MAX];
void dijkstra(int n) {
  for (int i = 0; i < MAX; i++) d[n][i] = INF;
  s.insert(make_pair(0, n));
  d[n][n] = 0;
  while (!s.empty()) {
    int v = s.begin()->second;
    s.erase(s.begin());
    for (int i = 0; i < adj[v].size(); i++) {
      int u = adj[v][i];
      long long second = w[v][i];
      if (d[n][u] > d[n][v] + second) {
        s.erase(make_pair(d[n][u], u));
        d[n][u] = d[n][v] + second;
        s.insert(make_pair(d[n][u], u));
      }
    }
  }
}
int ans[MAX];
int main() {
  string s1, s2;
  cin >> s1 >> s2;
  int m;
  cin >> m;
  for (int i = 0; i < m; i++) {
    char a1, b1;
    int a, b, c;
    cin >> a1 >> b1 >> c;
    a = a1 - 'a' + 1;
    b = b1 - 'a' + 1;
    adj[a].push_back(b);
    w[a].push_back(c);
  }
  for (int i = 1; i <= 26; i++) {
    dijkstra(i);
  }
  long long ans = 0;
  if (s1.size() != s2.size()) {
    cout << "-1";
    exit(0);
  } else {
    for (int i = 0; i < s1.size(); i++) {
      int g1 = s1[i] - 'a' + 1, g2 = s2[i] - 'a' + 1;
      if (s1[i] != s2[i]) {
        long long z = 0, min1 = 1e12;
        for (int i = 1; i <= 26; i++) {
          if (d[g1][i] + d[g2][i] <= min1) {
            min1 = d[g1][i] + d[g2][i];
            z = i;
          }
        }
        if (min1 == 1e12) {
          cout << -1;
          exit(0);
        }
        ans += min1;
        s1[i] = z + 'a' - 1;
        s2[i] = z + 'a' - 1;
      }
    }
  }
  cout << ans << endl << s1;
}
