#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;
}
