#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:1608864")
void ASS(bool b) {
  if (!b) ++*(int*)0;
}
const int inf = 1 << 29;
int d[32][32];
int main() {
  string a, b;
  cin >> a;
  cin >> b;
  for (int i = 0; i < (int)(26); i++)
    for (int j = 0; j < (int)(26); j++) d[i][j] = inf;
  int n;
  cin >> n;
  for (int i = 0; i < (int)(n); i++) {
    string sa, sb;
    int w;
    cin >> sa >> sb >> w;
    int x = sa[0] - 'a';
    int y = sb[0] - 'a';
    d[x][y] = min(d[x][y], w);
  }
  for (int i = 0; i < (int)(26); i++) d[i][i] = 0;
  for (int k = 0; k < (int)(26); k++)
    for (int i = 0; i < (int)(26); i++)
      for (int j = 0; j < (int)(26); j++)
        d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
  if (a.size() != b.size()) {
    printf("-1\n");
    return 0;
  }
  long long res = 0;
  string ans = a;
  for (int i = 0; i < (int)(a.size()); i++) {
    int t = inf;
    for (int j = 0; j < (int)(26); j++)
      if (t > d[a[i] - 'a'][j] + d[b[i] - 'a'][j]) {
        t = d[a[i] - 'a'][j] + d[b[i] - 'a'][j];
        ans[i] = 'a' + j;
      }
    if (t == inf) {
      printf("-1\n");
      return 0;
    }
    res += t;
  }
  printf("%lld\n", res);
  printf("%s\n", ans.c_str());
  return 0;
}
