可以用最短路做,想通了就很简单了
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <vector>
#include <string.h>
#define INF 0x3f3f3f3f
#define _for1(i,a,b) for( int i=(a); i<(b); ++i)
#define _for2(i,a,b) for( int i=(a); i>(b); i--)
#define _rep1(i,a,b) for( int i=(a); i<=(b); ++i)
#define _rep2(i,a,b) for( int i=(a); i>=(b); i--)
typedef long long ll;
using namespace std;
#define maxn 105
int n, nn;
int m[300][300];
char s1[maxn], s2[maxn];
int main()
{
memset(m, 0,sizeof(m));
for (char i = 'a'; i <= 'z'; i++) {
m[i][i] = 1;
}
cin >> n;
getchar();
cin >> s1 >> s2;
getchar();
cin >> nn;
getchar();
_for1(i,0, nn) {
char cf, ct;
scanf("%c %c", &cf, &ct);
getchar();
m[cf][ct] = 1;
}
for (char k = 'a'; k <= 'z'; k++) {
for (char i = 'a'; i <= 'z'; i++) {
for (char j = 'a'; j <= 'z'; j++) {
if (m[i][k] && m[k][j]) {
m[i][j] = 1;
}
}
}
}
int f = 1;
_for1(i,0, n) {
if (!m[s1[i]][s2[i]]) {
f = 0;
break;
}
}
printf("%s", f ? "YES\n" : "NO\n");
return 0;
}