#include <bits/stdc++.h>
using namespace std;
const int INF = (1 << 30) - 1;
const double EPS = 1e-9, PI = (2 * acos(0.0));
template <class T>
inline void checkmin(T& a, T b) {
  if (b < a) a = b;
}
template <class T>
inline void checkmax(T& a, T b) {
  if (a < b) a = b;
}
template <class T>
inline T sqr(T x) {
  return (x * x);
}
int mat[130][130];
char str[100005];
int main() {
  int n, m, a, b, k;
  char i, j;
  string sa, sb, res1 = "", res2 = "";
  int la, lb;
  scanf(" %s", str);
  sa = str;
  scanf(" %s", str);
  sb = str;
  la = (int)sa.size();
  lb = (int)sb.size();
  if (la != lb) {
    cout << -1;
    return 0;
  }
  for (i = 'a'; i <= 'z'; i++)
    for (j = 'a'; j <= 'z'; j++)
      if (i != j) mat[i][j] = INF;
  scanf(" %d", &m);
  while (m--) {
    scanf(" %c %c %d", &i, &j, &k);
    checkmin(mat[i][j], k);
  }
  int sum1 = 0, sum2 = 0, sum = 0;
  string res = "";
  for (k = 'a'; k <= 'z'; k++)
    for (i = 'a'; i <= 'z'; i++)
      for (j = 'a'; j <= 'z'; j++) checkmin(mat[i][j], mat[i][k] + mat[k][j]);
  for (k = 0; k < (int)(la); k++) {
    i = sa[k];
    j = sb[k];
    char c, p = 'a';
    for (c = 'a'; c <= 'z'; c++)
      if (mat[i][c] + mat[j][c] < mat[i][p] + mat[j][p]) p = c;
    if (mat[i][p] + mat[j][p] == INF) {
      cout << -1;
      return 0;
    }
    sum += mat[i][p] + mat[j][p];
    res += p;
  }
  cout << sum << endl << res;
  return 0;
}
