#include <bits/stdc++.h>
int tmap[26][26], dist[26][26];
char sstr[100010], tstr[100010];
char ansstr[100010];
void floyd(int dist[][26], int tmap[][26], int n = 26) {
  int i, j, k;
  for (i = 0; i < n; i++) {
    for (j = 0; j < n; j++) dist[i][j] = tmap[i][j];
  }
  for (k = 0; k < n; k++) {
    for (i = 0; i < n; i++) {
      for (j = 0; j < n; j++) {
        if (dist[i][k] != 0x7fffffff && dist[k][j] != 0x7fffffff &&
            dist[i][j] > dist[i][k] + dist[k][j])
          dist[i][j] = dist[i][k] + dist[k][j];
      }
    }
  }
}
int main() {
  scanf(" %s %s", sstr, tstr);
  int n;
  scanf(" %d", &n);
  int i, j;
  for (i = 0; i < 26; i++) {
    tmap[i][i] = 0;
    for (j = i + 1; j < 26; j++) {
      tmap[i][j] = tmap[j][i] = 0x7fffffff;
    }
  }
  for (i = 0; i < n; i++) {
    char a, b, w;
    scanf(" %c %c %d", &a, &b, &w);
    if (tmap[a - 'a'][b - 'a'] > w) tmap[a - 'a'][b - 'a'] = w;
  }
  floyd(dist, tmap);
  int ans = 0;
  for (i = 0; sstr[i] || tstr[i]; i++) {
    if (!sstr[i] || !tstr[i]) {
      ans = -1;
      break;
    }
    if (sstr[i] == tstr[i]) {
      ansstr[i] = sstr[i];
      continue;
    }
    char tchr;
    int tsum = 0x7fffffff;
    for (j = 0; j < 26; j++) {
      if (dist[sstr[i] - 'a'][j] != 0x7fffffff &&
          dist[tstr[i] - 'a'][j] != 0x7fffffff &&
          dist[sstr[i] - 'a'][j] + dist[tstr[i] - 'a'][j] < tsum) {
        tsum = dist[sstr[i] - 'a'][j] + dist[tstr[i] - 'a'][j];
        tchr = j + 'a';
      }
    }
    if (tsum != 0x7fffffff) {
      ansstr[i] = tchr;
      ans += tsum;
    } else {
      ans = -1;
      break;
    }
  }
  ansstr[i] = 0;
  printf("%d\n", ans);
  if (ans != -1) puts(ansstr);
  return 0;
}
