#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  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;
}
