#include <bits/stdc++.h>
using namespace std;
const double EXP = 1e-9;
const int INF = 0x3f3f3f3f;
const long long MINF = 0x3f3f3f3f3f3f3f3f;
const double DINF = 0xffffffffffff;
const int mod = 1e9 + 7;
const int N = 1e5 + 5;
char a[N], b[N], c[N];
int change[30][30];
int mp[30][30];
int d[30][30];
void Floyd() {
  int n = 25;
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= n; j++) d[i][j] = mp[i][j];
  for (int k = 0; k <= n; k++)
    for (int i = 0; i <= n; i++)
      for (int j = 0; j <= n; j++) d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}
int main() {
  std::ios::sync_with_stdio(false);
  int n, val;
  char x, y;
  scanf(" %s %s", a, b);
  scanf("%d", &n);
  for (int i = 0; i < 30; i++)
    for (int j = 0; j < 30; j++) {
      if (i == j)
        mp[i][j] = 0;
      else
        mp[i][j] = INF;
    }
  for (int i = 1; i <= n; i++) {
    scanf(" %c %c %d", &x, &y, &val);
    int t1 = x - 'a';
    int t2 = y - 'a';
    mp[t1][t2] = min(mp[t1][t2], val);
  }
  Floyd();
  int len1 = strlen(a);
  int len2 = strlen(b);
  if (len1 != len2) {
    printf("-1\n");
    return 0;
  }
  bool flag = false;
  int ans = 0;
  for (int i = 0; i < len1; i++) {
    int minn = INF;
    int t1 = a[i] - 'a';
    int t2 = b[i] - 'a';
    for (int j = 0; j < 26; j++) {
      int x1 = d[t1][j];
      int x2 = d[t2][j];
      if (x1 != INF && x2 != INF && minn > x1 + x2) {
        minn = x1 + x2;
        c[i] = 'a' + j;
      }
    }
    if (minn == INF) {
      flag = true;
      break;
    }
    ans += minn;
  }
  if (flag)
    printf("-1\n");
  else {
    c[len1] = '\0';
    printf("%d\n", ans);
    printf("%s\n", c);
  }
  return 0;
}
