#include <bits/stdc++.h>   using namespace std;   const int INF = 100 * 30;   int main() {     string A, B;     cin >> A >> B;     vector<vector<int> > v(26, vector<int>(26, INF));     for (int i = 0; i < 26; ++i) v[i][i] = 0;     int N;     cin >> N;     while (N--) {       char a, b;       int cost;       cin >> a >> b >> cost;       int ia = a -  a , ib = b -  a ;       v[ia][ib] = min(v[ia][ib], cost);     }     for (int k = 0; k < 26; ++k)       for (int i = 0; i < 26; ++i)         for (int j = 0; j < 26; ++j) v[i][j] = min(v[i][j], v[i][k] + v[k][j]);     if (A.size() != B.size()) {       cout << -1 << endl;     } else {       unsigned ans = 0;       bool fail = false;       string res =   ;       for (int i = 0; i < A.size(); ++i) {         if (A[i] == B[i]) {           res += A[i];           continue;         }         int ia = A[i] -  a , ib = B[i] -  a ;         char to_ch = 0;         int cost = INF * 10;         for (int j = 0; j < 26; ++j) {           if (v[ia][j] < INF && v[ib][j] < INF) {             if (v[ia][j] + v[ib][j] < cost) {               cost = v[ia][j] + v[ib][j];               to_ch = j +  a ;             }           }         }         if (to_ch == 0) {           fail = true;           break;         }         ans += cost;         res += to_ch;       }       if (fail)         cout << -1 << endl;       else {         cout << ans << endl;         cout << res << endl;       }     }     return 0;   }   