#include <bits/stdc++.h>
const int INF = 0x3f3f3f3f;
using namespace std;
int main() {
  int n;
  char s[100005];
  char s1[100005];
  char str[100005];
  long long f[250][250];
  memset(f, INF, sizeof(f));
  scanf("%s", s);
  getchar();
  scanf("%s", s1);
  scanf("%d", &n);
  char a, b;
  long long w, z, x;
  for (int i = 1; i <= n; i++) {
    getchar();
    scanf("%c %c %lld", &a, &b, &w);
    z = a;
    x = b;
    if (f[a][b] != INF) {
      f[a][b] = min(w, f[a][b]);
    } else {
      f[a][b] = w;
    }
  }
  for (int i = 'a'; i <= 'z'; i++) {
    for (int j = 'a'; j <= 'z'; j++) {
      for (int k = 'a'; k <= 'z'; k++) {
        if (f[j][k] > f[j][i] + f[i][k]) f[j][k] = f[j][i] + f[i][k];
      }
    }
  }
  for (int i = 'a'; i <= 'z'; i++) {
    f[i][i] = 0;
  }
  int f2 = 1, f1 = 1;
  long long count = 0;
  long long temp = 0, temp1 = 0;
  int l1 = strlen(s);
  int l2 = strlen(s1);
  if (l1 != l2) {
    printf("-1\n");
  } else {
    f1 = 0;
    for (int i = 0; i < l1; i++) {
      f1 = 0;
      if (s[i] != s1[i]) {
        int temp = INF;
        int pos;
        for (int k = 'a'; k <= 'z'; k++) {
          if (f[s[i]][k] != INF && f[s1[i]][k] != INF) {
            if (temp > f[s[i]][k] + f[s1[i]][k]) {
              pos = k;
              f1 = 1;
              temp = f[s[i]][k] + f[s1[i]][k];
            }
          }
        }
        if (f1 == 0) {
          break;
        } else {
          str[i] = pos;
          count += temp;
        }
      } else {
        str[i] = s[i];
        f1 = 1;
      }
    }
    if (f1 == 0) {
      printf("-1\n");
    } else {
      printf("%lld\n", count);
      printf("%s\n", str);
    }
  }
  return 0;
}
