#include <bits/stdc++.h>   using namespace std;   int path[26][26];   char s[100001], t[100001];   void Floyd_Warshall(int n) {     int i, j, k;     for (k = 0; k < n; k++) {       for (i = 0; i < n; i++) {         for (j = 0; j < n; j++) {           if (path[i][k] + path[k][j] < path[i][j]) {             path[i][j] = path[i][k] + path[k][j];           }         }       }     }   }   int main() {     char A[10], B[10];     int n;     int i, j;     int w;     int len;     int ans;     int minval;     int minnum;     bool flag;     while (scanf( %s%s%d , s, t, &n) != EOF) {       for (i = 0; i < 26; i++) {         for (j = 0; j < 26; j++) {           if (i != j) {             path[i][j] = 1000000000;           }         }       }       for (i = 0; i < n; i++) {         scanf( %s%s%d , A, B, &w);         path[A[0] -  a ][B[0] -  a ] = min(path[A[0] -  a ][B[0] -  a ], w);       }       if (strlen(s) != strlen(t)) {         printf( -1 n );         continue;       }       Floyd_Warshall(26);       len = strlen(s);       ans = 0;       flag = true;       for (i = 0; i < len; i++) {         if (s[i] != t[i]) {           minval = 1000000000;           for (j = 0; j < 26; j++) {             if (path[s[i] -  a ][j] + path[t[i] -  a ][j] < minval) {               minval = path[s[i] -  a ][j] + path[t[i] -  a ][j];               minnum = j;             }           }           if (minval == 1000000000) {             flag = false;             break;           }           ans += minval;           s[i] = minnum +  a ;         }       }       if (flag) {         printf( %d n%s n , ans, s);       } else {         printf( -1 n );       }     }     return 0;   }   