#include <bits/stdc++.h>
using namespace std;
char a[100061];
char b[100061];
char ans[100061];
int G[26][26];
int main() {
  scanf("%s%s", a, b);
  int n;
  scanf("%d", &n);
  for (int i = (0); i < (26); i++)
    for (int j = (0); j < (26); j++) G[i][j] = 1000000001;
  for (int i = (0); i < (26); i++) G[i][i] = 0;
  for (int i = (0); i < (n); i++) {
    char t1[10];
    char t2[10];
    int v;
    scanf("%s%s%d", t1, t2, &v);
    int a1 = t1[0] - 'a', a2 = t2[0] - 'a';
    G[a1][a2] = min(G[a1][a2], v);
  }
  for (int k = (0); k < (26); k++)
    for (int i = (0); i < (26); i++)
      for (int j = (0); j < (26); j++)
        G[i][j] = min(G[i][j], G[i][k] + G[k][j]);
  int ret = 0;
  if (strlen(a) != strlen(b)) {
    printf("-1\n");
    return 0;
  }
  int tn = strlen(a);
  for (int i = (0); i < (tn); i++) {
    int v = 1000000001;
    for (char c = 'a'; c <= 'z'; c++) {
      int v1 = G[a[i] - 'a'][c - 'a'];
      int v2 = G[b[i] - 'a'][c - 'a'];
      if (v1 < 1000000001 && v2 < 1000000001) {
        if (v1 + v2 < v) v = v1 + v2, ans[i] = c;
      }
    }
    if (v >= 1000000001) {
      printf("-1\n");
      return 0;
    }
    ret += v;
  }
  ans[strlen(a)] = 0;
  printf("%d\n%s\n", ret, ans);
  return 0;
}
