#include <bits/stdc++.h>
using namespace std;
const double pi = 2.0 * acos(0.0);
const double eps = 1.0e-9;
const int dr[] = {-1, 0, 1, 0}, dc[] = {0, 1, 0, -1};
const int dr6[] = {1, 1, 0, -1, -1, 0}, dc6[] = {0, 1, 1, 0, -1, -1};
const int dr8[] = {-1, -1, 0, 1, 1, 1, 0, -1},
          dc8[] = {0, 1, 1, 1, 0, -1, -1, -1};
int main(void) {
  int kase = 1000000000;
  char s1[100100], s2[100100];
  for (int ks = 1, n; ks <= kase && 3 == scanf("%s %s %d", s1, s2, &n); ++ks) {
    int d[32][32];
    memset(d, 0x3f, sizeof(d));
    for (int i = 0; i < 32; ++i) d[i][i] = 0;
    char w1[32], w2[32];
    for (int i = 0, x; i < n && 3 == scanf("%s %s %d", w1, w2, &x); ++i)
      d[*w1 - 'a'][*w2 - 'a'] = min(d[*w1 - 'a'][*w2 - 'a'], x);
    if (strlen(s1) != strlen(s2)) {
      puts("-1");
      continue;
    }
    for (int i = 0; i < 32; ++i)
      for (int j = 0; j < 32; ++j)
        for (int k = 0; k < 32; ++k) d[j][k] = min(d[j][k], d[j][i] + d[i][k]);
    int t = 0;
    for (int i = 0; s1[i] && t < 1000000000; ++i) {
      int x = 0;
      for (int j = 0; j < 26; ++j)
        if (d[s1[i] - 'a'][x] + d[s2[i] - 'a'][x] >
            d[s1[i] - 'a'][j] + d[s2[i] - 'a'][j])
          x = j;
      t += d[s1[i] - 'a'][x] + d[s2[i] - 'a'][x], s1[i] = x + 'a';
    }
    if (t < 1000000000)
      printf("%d\n%s\n", t, s1);
    else
      puts("-1");
  }
  return 0;
}
