#include<bits/stdc++.h>
using namespace std;
char s1[105],s2[105];
long long mp[30][30],max1[1005];
long long ans;
void print(int a){
if(a==1) cout<<"a";
if(a==2) cout<<"b";
if(a==3) cout<<"c";
if(a==4) cout<<"d";
if(a==5) cout<<"e";
if(a==6) cout<<"f";
if(a==7) cout<<"g";
if(a==8) cout<<"h";
if(a==9) cout<<"i";
if(a==10) cout<<"j";
if(a==11) cout<<"k";
if(a==12) cout<<"l";
if(a==13) cout<<"m";
if(a==14) cout<<"n";
if(a==15) cout<<"o";
if(a==16) cout<<"p";
if(a==17) cout<<"q";
if(a==18) cout<<"r";
if(a==19) cout<<"s";
if(a==20) cout<<"t";
if(a==21) cout<<"u";
if(a==22) cout<<"v";
if(a==23) cout<<"w";
if(a==24) cout<<"x";
if(a==25) cout<<"y";
if(a==26) cout<<"z";
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);cout.tie(NULL);
memset(max1,-1,sizeof max1);
for(int i=1;i<=26;++i)
for(int j=1;j<=26;++j)
mp[i][j]=10000000005;
for(int i=1;i<=30;++i) mp[i][i]=0;
cin>>s1;cin>>s2;
int n=strlen(s1);
int m=strlen(s2);
int q;cin>>q;
while(q--){
char s[6];
char a,b;long long c;
cin>>a>>b>>c;
mp[a-96][b-96]=min(c,mp[a-96][b-96]);//从a到b的最小转化
}
if(n!=m){
printf("-1");
return 0;
}
for(int k=1;k<=26;++k)
for(int i=1;i<=26;++i)
for(int j=1;j<=26;++j){
mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]);
}
for(int i=0;i<n;++i){
long long maxn=10000000005;
if(s1[i]==s2[i]){
max1[i]=s1[i]-96;
continue;
}
for(int k=1;k<=26;++k){
if(mp[s1[i]-96][k]+mp[s2[i]-96][k]<maxn&&mp[s1[i]-96][k]+mp[s2[i]-96][k]<=500000){
maxn=mp[s1[i]-96][k]+mp[s2[i]-96][k];
max1[i]=k;
}
}
if(max1[i]==-1) {
cout<<"-1";
return 0;
}
ans+=maxn;
}
// cout<<max1[0]<<endl<<max1[1]<<endl<<max1[2]<<endl<<max1[3]<<endl;
cout<<ans<<endl;
for(int i=0;i<n;++i) print(max1[i]);
cout<<endl;
return 0;
}