#include <bits/stdc++.h>
using namespace std;
struct pii {
  int x, y;
  pii(int _x, int _y) {
    x = _x;
    y = _y;
  };
  pii(){};
  bool operator<(const pii &X) const {
    if (x != X.x) return (x < X.x);
    return y < X.y;
  };
};
const int oo = (int)1e9;
int n, c, lens, lent, moves[300][300];
char a[2], b[2], s[100010], t[100010], res[100010];
int main() {
  scanf("%s%s", s, t);
  scanf("%d", &n);
  for (int i = 'a'; i <= 'z'; i++) {
    for (int j = 'a'; j <= 'z'; j++) {
      moves[i][j] = oo;
      if (i == j) moves[i][j] = 0;
    }
  }
  for (int i = 0; i < n; i++) {
    scanf("%s%s%d", a, b, &c);
    moves[a[0]][b[0]] = min(moves[a[0]][b[0]], c);
  }
  for (int k = 'a'; k <= 'z'; k++) {
    for (int i = 'a'; i <= 'z'; i++) {
      for (int j = 'a'; j <= 'z'; j++) {
        moves[i][j] = min(moves[i][j], moves[i][k] + moves[k][j]);
      }
    }
  }
  lens = strlen(s);
  lent = strlen(t);
  if (lens != lent) {
    printf("-1\n");
    return 0;
  }
  int ans = 0;
  for (int i = 0; i < lens; i++) {
    int mini = oo;
    int id;
    for (int j = 'a'; j <= 'z'; j++) {
      int tmp = moves[s[i]][j] + moves[t[i]][j];
      if (mini > tmp) {
        mini = tmp;
        id = j;
      }
    }
    if (mini == oo) {
      printf("-1\n");
      return 0;
    }
    res[i] = id;
    ans += mini;
  }
  printf("%d\n", ans);
  printf("%s\n", res);
  return 0;
}
