#include <bits/stdc++.h>
using namespace std;
#define bint __int128
#define _3bkarm cin.tie(NULL); cout.tie(NULL); ios::sync_with_stdio(false);
struct HopcroftKarp {
static const int inf = 1000'000'000;
int n;
vector<int> l, r, d;
vector<vector<int>> adj;
HopcroftKarp(int _n, int _m){
n = _n;
int p = _n + _m + 1;
l.assign(p, 0);
r.assign(p, 0);
d.assign(p, 0);
adj.assign(p, {});
}
void add_edge(int u, int v){
adj[u].push_back(v + n);
}
bool bfs() {
queue<int> q;
for(int u = 1; u <= n; u++){
if(not l[u]) d[u] = 0, q.push(u);
else d[u] = inf;
}
d[0] = inf;
while(not q.empty()) {
int u = q.front();
q.pop();
for(auto v : adj[u]){
if(d[r[v]] == inf){
d[r[v]] = d[u] + 1;
q.push(r[v]);
}
}
}
return d[0] != inf;
}
bool dfs(int u) {
if (not u) return true;
for (int v : adj[u]) {
if ( d[ r[v] ] == d[u] + 1 and dfs(r[u]) ) {
l[u] = v, r[v] = u;
return true;
}
}
d[u] = inf;
return false;
}
int maxMatch() {
int ans = 0;
while ( bfs() ) {
for (int u = 1; u <= n; ++u) {
if ( not l[u] and dfs(u) ) {
++ans;
}
}
}
return ans;
}
};
int n, m;
vector<vector<int>> adj1, adj2;
const int N = 101;
bool vis[N][N][N][N];
bool dp[N][N][N][N];
bool can(int u1, int p1, int u2, int p2){
if (vis[u1][p1][u2][p2]) return dp[u1][p1][u2][p2];
vis[u1][p1][u2][p2] = true;
int sz1 = adj1[u1].size() - (p1 > 0), sz2 = adj2[u2].size() - (p2 > 0);
HopcroftKarp match(sz1, sz2);
int id1 = 0, id2 = 0;
for(auto v1 : adj1[u1]){
if(v1 == p1) continue;
id1++;
id2 = 0;
for(auto v2 : adj2[u2]){
if(v2 == p2) continue;
id2++;
if(can(v1, u1, v2, u2))
match.add_edge(id1, id2);
}
}
return dp[u1][p1][u2][p2] = (match.maxMatch() == sz2);
}
void getShitDone() {
cin >> n;
adj1.resize(n + 1);
for(int i = 0; i < n - 1; i++){
int u, v; cin >> u >> v;
adj1[u].push_back(v);
adj1[v].push_back(u);
}
cin >> m;
adj2.resize(m + 1);
for(int i = 0; i < m - 1; i++){
int u, v; cin >> u >> v;
adj2[u].push_back(v);
adj2[v].push_back(u);
}
for(int u = 1; u <= n; u++){
for(int v = 1; v <= m; v++){
if(can(u, 0, v, 0)){
cout << "Y";
return;
}
}
}
cout << "N";
}
signed main() {
_3bkarm
int ts = 1;
while (ts--) {
getShitDone();
if (ts != 0) cout << '\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBiaW50IF9faW50MTI4CiNkZWZpbmUgXzNia2FybSBjaW4udGllKE5VTEwpOyBjb3V0LnRpZShOVUxMKTsgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwoKc3RydWN0IEhvcGNyb2Z0S2FycCB7CiAgICBzdGF0aWMgY29uc3QgaW50IGluZiA9IDEwMDAnMDAwJzAwMDsKCiAgICBpbnQgbjsKICAgIHZlY3RvcjxpbnQ+IGwsIHIsIGQ7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGFkajsKCiAgICBIb3Bjcm9mdEthcnAoaW50IF9uLCBpbnQgX20pewogICAgICAgIG4gPSBfbjsKICAgICAgICBpbnQgcCA9IF9uICsgX20gKyAxOwogICAgICAgIGwuYXNzaWduKHAsIDApOwogICAgICAgIHIuYXNzaWduKHAsIDApOwogICAgICAgIGQuYXNzaWduKHAsIDApOwogICAgICAgIGFkai5hc3NpZ24ocCwge30pOwogICAgfQoKICAgIHZvaWQgYWRkX2VkZ2UoaW50IHUsIGludCB2KXsKICAgICAgICBhZGpbdV0ucHVzaF9iYWNrKHYgKyBuKTsKICAgIH0KCiAgICBib29sIGJmcygpIHsKICAgICAgICBxdWV1ZTxpbnQ+IHE7CiAgICAgICAgZm9yKGludCB1ID0gMTsgdSA8PSBuOyB1KyspewogICAgICAgICAgICBpZihub3QgbFt1XSkgZFt1XSA9IDAsIHEucHVzaCh1KTsKICAgICAgICAgICAgZWxzZSBkW3VdID0gaW5mOwogICAgICAgIH0KCiAgICAgICAgZFswXSA9IGluZjsKICAgICAgICB3aGlsZShub3QgcS5lbXB0eSgpKSB7CiAgICAgICAgICAgIGludCB1ID0gcS5mcm9udCgpOwogICAgICAgICAgICBxLnBvcCgpOwogICAgICAgICAgICBmb3IoYXV0byB2IDogYWRqW3VdKXsKICAgICAgICAgICAgICAgIGlmKGRbclt2XV0gPT0gaW5mKXsKICAgICAgICAgICAgICAgICAgICBkW3Jbdl1dID0gZFt1XSArIDE7CiAgICAgICAgICAgICAgICAgICAgcS5wdXNoKHJbdl0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBkWzBdICE9IGluZjsKICAgIH0KCiAgICBib29sIGRmcyhpbnQgdSkgewogICAgICAgIGlmIChub3QgdSkgcmV0dXJuIHRydWU7CiAgICAgICAgZm9yIChpbnQgdiA6IGFkalt1XSkgewogICAgICAgICAgICBpZiAoIGRbIHJbdl0gXSA9PSBkW3VdICsgMSBhbmQgZGZzKHJbdV0pICkgewogICAgICAgICAgICAgICAgbFt1XSA9IHYsIHJbdl0gPSB1OwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZFt1XSA9IGluZjsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaW50IG1heE1hdGNoKCkgewogICAgICAgIGludCBhbnMgPSAwOwogICAgICAgIHdoaWxlICggYmZzKCkgKSB7CiAgICAgICAgICAgIGZvciAoaW50IHUgPSAxOyB1IDw9IG47ICsrdSkgewogICAgICAgICAgICAgICAgaWYgKCBub3QgbFt1XSBhbmQgZGZzKHUpICkgewogICAgICAgICAgICAgICAgICAgICsrYW5zOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBhbnM7CiAgICB9Cn07CgppbnQgbiwgbTsKdmVjdG9yPHZlY3RvcjxpbnQ+PiBhZGoxLCBhZGoyOwoKY29uc3QgaW50IE4gPSAxMDE7Cgpib29sIHZpc1tOXVtOXVtOXVtOXTsKYm9vbCBkcFtOXVtOXVtOXVtOXTsKCmJvb2wgY2FuKGludCB1MSwgaW50IHAxLCBpbnQgdTIsIGludCBwMil7CiAgICBpZiAodmlzW3UxXVtwMV1bdTJdW3AyXSkgcmV0dXJuIGRwW3UxXVtwMV1bdTJdW3AyXTsKICAgIHZpc1t1MV1bcDFdW3UyXVtwMl0gPSB0cnVlOwoKICAgIGludCBzejEgPSBhZGoxW3UxXS5zaXplKCkgLSAocDEgPiAwKSwgc3oyID0gYWRqMlt1Ml0uc2l6ZSgpIC0gKHAyID4gMCk7CiAgICBIb3Bjcm9mdEthcnAgbWF0Y2goc3oxLCBzejIpOwoKICAgIGludCBpZDEgPSAwLCBpZDIgPSAwOwogICAgZm9yKGF1dG8gdjEgOiBhZGoxW3UxXSl7CiAgICAgICAgaWYodjEgPT0gcDEpIGNvbnRpbnVlOwogICAgICAgIGlkMSsrOwogICAgICAgIGlkMiA9IDA7CiAgICAgICAgZm9yKGF1dG8gdjIgOiBhZGoyW3UyXSl7CiAgICAgICAgICAgIGlmKHYyID09IHAyKSBjb250aW51ZTsKCiAgICAgICAgICAgIGlkMisrOwogICAgICAgICAgICBpZihjYW4odjEsIHUxLCB2MiwgdTIpKQogICAgICAgICAgICAgICAgbWF0Y2guYWRkX2VkZ2UoaWQxLCBpZDIpOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZHBbdTFdW3AxXVt1Ml1bcDJdID0gKG1hdGNoLm1heE1hdGNoKCkgPT0gc3oyKTsKfQoKdm9pZCBnZXRTaGl0RG9uZSgpIHsKICAgIGNpbiA+PiBuOwogICAgYWRqMS5yZXNpemUobiArIDEpOwogICAgZm9yKGludCBpID0gMDsgaSA8IG4gLSAxOyBpKyspewogICAgICAgIGludCB1LCB2OyBjaW4gPj4gdSA+PiB2OwogICAgICAgIGFkajFbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGFkajFbdl0ucHVzaF9iYWNrKHUpOwogICAgfQoKICAgIGNpbiA+PiBtOwogICAgYWRqMi5yZXNpemUobSArIDEpOwogICAgZm9yKGludCBpID0gMDsgaSA8IG0gLSAxOyBpKyspewogICAgICAgIGludCB1LCB2OyBjaW4gPj4gdSA+PiB2OwogICAgICAgIGFkajJbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGFkajJbdl0ucHVzaF9iYWNrKHUpOwogICAgfQoKICAgIGZvcihpbnQgdSA9IDE7IHUgPD0gbjsgdSsrKXsKICAgICAgICBmb3IoaW50IHYgPSAxOyB2IDw9IG07IHYrKyl7CiAgICAgICAgICAgIGlmKGNhbih1LCAwLCB2LCAwKSl7CiAgICAgICAgICAgICAgICBjb3V0IDw8ICJZIjsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBjb3V0IDw8ICJOIjsKfQoKc2lnbmVkIG1haW4oKSB7CiAgICBfM2JrYXJtCgogICAgaW50IHRzID0gMTsKICAgIHdoaWxlICh0cy0tKSB7CiAgICAgICAgZ2V0U2hpdERvbmUoKTsKICAgICAgICBpZiAodHMgIT0gMCkgY291dCA8PCAnXG4nOwogICAgfQoKICAgIHJldHVybiAwOwp9