#include <bits/stdc++.h>
using namespace std;
char s1[100010], s2[100010];
int n;
char c1[20], c2[20];
int w, ans;
int dis[30][30];
void add(int x, int y, int v) { dis[x][y] = min(dis[x][y], v); }
void Floyd() {
  for (int i = 0; i < 26; i++) dis[i][i] = 0;
  for (int k = 0; k <= 26; k++)
    for (int i = 0; i <= 26; i++)
      for (int j = 0; j <= 26; j++)
        if (dis[i][k] + dis[k][j] < dis[i][j])
          dis[i][j] = dis[i][k] + dis[k][j];
}
int main() {
  for (int i = 0; i <= 26; i++)
    for (int j = 0; j <= 26; j++) dis[i][j] = 1000000000;
  scanf("%s%s", s1, s2);
  if (strlen(s1) != strlen(s2)) {
    printf("-1");
    return 0;
  }
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%s%s%d", c1, c2, &w);
    add(c1[0] - 'a', c2[0] - 'a', w);
  }
  Floyd();
  int len = strlen(s1);
  char ch;
  for (int i = 0; i < len; i++)
    if (s1[i] != s2[i]) {
      int num = 2000000000;
      for (int j = 0; j < 26; j++) {
        int dis1 = dis[s1[i] - 'a'][j];
        int dis2 = dis[s2[i] - 'a'][j];
        if (dis1 == 1000000000 || dis2 == 1000000000) continue;
        if (num > dis1 + dis2) {
          ch = j + 'a';
          num = dis1 + dis2;
        }
      }
      if (num == 2000000000) {
        printf("-1");
        return 0;
      }
      ans += num;
      s1[i] = ch;
    }
  printf("%d\n%s", ans, s1);
  return 0;
}
