#include <bits/stdc++.h>
using namespace std;
int main() {
  char A[100002];
  char B[100002];
  char ans[100002];
  int c[26][26], t, temp[28][26][26];
  for (int i = 0; i < 26; ++i)
    for (int j = 0; j < 26; ++j) c[i][j] = 1000000007;
  scanf("%s", A);
  scanf("%s", B);
  int n;
  cin >> n;
  for (int i = 0; i < n; ++i) {
    char a, b;
    cin >> a >> b >> t;
    c[a - 'a'][b - 'a'] = min(c[a - 'a'][b - 'a'], t);
  }
  for (int i = 0; i < 26; ++i) {
    c[i][i] = 0;
  }
  if (strlen(A) != strlen(B)) {
    cout << "-1";
    return 0;
  }
  memcpy(temp[0], c, sizeof(c));
  for (int k = 1; k < 27; ++k) {
    for (int i = 0; i < 26; ++i)
      for (int j = 0; j < 26; ++j) {
        temp[k][i][j] = min(temp[k - 1][i][j],
                            temp[k - 1][i][k - 1] + temp[k - 1][k - 1][j]);
      }
  }
  memcpy(c, temp[26], sizeof(temp[26]));
  int len = strlen(A);
  bool g = 0;
  int total = 0;
  for (int i = 0; i < len; ++i) {
    char final;
    int cost = 1000000007;
    for (int j = 0; j < 26; ++j) {
      int c1 = c[A[i] - 'a'][j];
      int c2 = c[B[i] - 'a'][j];
      if (c1 + c2 < cost) {
        cost = c1 + c2;
        final = 'a' + j;
      }
    }
    if (cost == 1000000007) {
      g = 1;
      break;
    } else {
      ans[i] = final;
      total += cost;
    }
  }
  if (g == 0) {
    cout << total << endl << ans;
  } else
    cout << "-1";
  return 0;
}
