#include <bits/stdc++.h>
using namespace std;
string s1, s2;
int n, res;
int z[26][26];
int main() {
  cin >> s1 >> s2;
  cin >> n;
  if (s1.size() != s2.size()) {
    cout << -1;
    return 0;
  }
  memset(z, -1, sizeof(z));
  while (n--) {
    char a, b;
    int c;
    cin >> a >> b;
    a -= 'a';
    b -= 'a';
    cin >> c;
    if (z[a][b] == -1 || z[a][b] > c) z[a][b] = c;
  }
  string ans = string(s1.size(), '.');
  for (int i = 0; i < 26; i++) z[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 (z[i][k] != -1 && z[k][j] != -1 &&
            (z[i][j] == -1 || z[i][j] > z[i][k] + z[k][j]))
          z[i][j] = z[i][k] + z[k][j];
  for (int i = 0; i < s1.size(); i++) {
    int x = s1[i] - 'a', y = s2[i] - 'a';
    if (x == y) {
      ans[i] = x + 'a';
      continue;
    }
    int tmp = -1;
    for (int k = 0; k < 26; k++)
      if ((tmp > z[x][k] + z[y][k] || tmp == -1) && z[x][k] != -1 &&
          z[y][k] != -1)
        tmp = z[x][k] + z[y][k], ans[i] = k + 'a';
    if (tmp == -1) {
      cout << -1;
      return 0;
    };
    res += tmp;
  }
  cout << res << endl;
  cout << ans;
  return 0;
}
