#include <bits/stdc++.h>
using namespace std;
struct edge {
  int from, to, rnk;
  long long w;
  edge(int from, int to, int rnk, long long w)
      : from(from), to(to), rnk(rnk), w(w){};
  bool operator<(const edge& e) const { return w > e.w; }
};
int l;
int cnt = 0;
long long OO = LONG_LONG_MAX;
vector<int> vpe;
void dijk(int src, vector<vector<edge> > adj) {
  int n = adj.size();
  vector<long long> dist(n, OO);
  priority_queue<edge> pq;
  pq.push(edge(src, src, 0, 0ll));
  dist[src] = 0;
  while (pq.size()) {
    edge e = pq.top();
    pq.pop();
    if (dist[e.to] < e.w) continue;
    if (e.to != src) vpe.push_back(e.rnk);
    for (int i = 0; i < adj[e.to].size(); i++) {
      edge ne = adj[e.to][i];
      if (dist[ne.to] > (ne.w + dist[ne.from])) {
        ne.w = dist[ne.to] = (ne.w + dist[ne.from]);
        pq.push(ne);
      }
    }
  }
}
int main() {
  int n;
  const int OO = INT_MAX;
  vector<vector<int> > dp(26, vector<int>(26, OO));
  for (int i = 0; i < 26; i++) {
    dp[i][i] = 0;
  }
  string s1, s2;
  cin >> s1 >> s2;
  int k;
  cin >> k;
  for (int i = 0; i < k; i++) {
    char f, t;
    int w;
    cin >> f >> t >> w;
    dp[f - 'a'][t - 'a'] = min(dp[f - 'a'][t - 'a'], w);
  }
  if (s1.size() != s2.size()) {
    cout << -1 << '\n';
  } else {
    for (int k = 0; k < 26; k++) {
      for (int i = 0; i < 26; i++) {
        for (int j = 0; j < 26; j++) {
          if (dp[i][k] == OO || dp[k][j] == OO) continue;
          if (dp[i][j] > dp[i][k] + dp[k][j]) dp[i][j] = dp[i][k] + dp[k][j];
        }
      }
    }
    int sm = 0;
    int f = 0;
    for (int i = 0; i < s1.size(); i++) {
      int mn = OO;
      char cmn;
      for (int j = 0; j < 26; j++) {
        if (dp[s1[i] - 'a'][j] == OO || dp[s2[i] - 'a'][j] == OO) continue;
        if (mn > (dp[s1[i] - 'a'][j] + dp[s2[i] - 'a'][j])) {
          mn = (dp[s1[i] - 'a'][j] + dp[s2[i] - 'a'][j]);
          cmn = 'a' + j;
        }
      }
      s1[i] = s2[i] = cmn;
      if (mn == OO) {
        f = 1;
        break;
      }
      sm += mn;
    }
    if (f == 1) {
      cout << -1 << '\n';
    } else {
      cout << sm << '\n';
      cout << s1 << '\n';
    }
  }
  return 0;
}
