#include <bits/stdc++.h>
using namespace std;
string a, b;
int n, p, d[30][30];
char x, y;
int main() {
  cin >> a >> b;
  scanf("%d", &n);
  for (int i = 0; i < 30; ++i) {
    for (int j = 0; j < 30; ++j) {
      if (i == j)
        d[i][j] = 0;
      else
        d[i][j] = 1000000007;
    }
  }
  for (int i = 0; i < n; ++i) {
    scanf(" %c %c %d", &x, &y, &p);
    d[x - 'a'][y - 'a'] = min(d[x - 'a'][y - 'a'], p);
  }
  for (int i = 0; i < 26; ++i) {
    for (int j = 0; j < 26; ++j) {
      for (int k = 0; k < 26; ++k) {
        d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
      }
    }
  }
  for (int i = 25; i >= 0; --i)
    for (int j = 25; j >= 0; --j)
      for (int k = 25; k >= 0; --k) d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
  if (a.size() != b.size()) {
    printf("-1\n");
    return 0;
  }
  int ans = 0;
  vector<char> s;
  for (int i = 0; i < (int)a.size(); ++i) {
    if (a[i] != b[i]) {
      int aux = 1000000007;
      char prox;
      for (int j = 0; j < 26; ++j) {
        if (d[a[i] - 'a'][j] + d[b[i] - 'a'][j] < aux) {
          prox = 'a' + j;
          aux = d[a[i] - 'a'][j] + d[b[i] - 'a'][j];
        }
      }
      if (aux >= 1000000007) {
        printf("-1\n");
        return 0;
      } else {
        ans += aux;
        s.push_back(prox);
      }
    } else {
      s.push_back(a[i]);
    }
  }
  printf("%d\n", ans);
  for (char l : s) {
    printf("%c", l);
  }
  printf("\n");
  return 0;
}
