#include<bits/stdc++.h>
using namespace std;

#define int long long

#define rep(i,n) for(int i=0;i<(n);i++)
#define pb push_back
#define all(v) (v).begin(),(v).end()
#define fi first
#define se second
typedef vector<int>vint;
typedef pair<int,int>pint;
typedef vector<pint>vpint;

template<typename A,typename B>inline void chmin(A &a,B b){if(a>b)a=b;}
template<typename A,typename B>inline void chmax(A &a,B b){if(a<b)a=b;}

int P,Q;
int N;
vector<int>A[1111],B[1111];

bitset<300>G[300];
bool used[1111];

void add(int a,int b){
    G[a][b]=1;
    G[a]|=G[b];
    rep(i,300)if(G[i][a])G[i]|=G[a];
}

void solve(){
    G[P][Q]=1;

    while(true){
        bool f=false;
        rep(i,N){
            if(used[i])continue;
            bool latte=false;
            rep(j,A[i].size()){
                if(G[A[i][j]][B[i][j]])latte=true;
            }
            if(!latte)continue;
            f=true;

            rep(j,A[i].size())add(A[i][j],B[i][j]);
            used[i]=true;
            break;
        }
        if(!f)break;
    }

    rep(i,300)if(G[i][i]){
        cout<<"No"<<endl;
        return;
    }
    cout<<"Yes"<<endl;

}

signed main(){
    string p,q;
    cin>>p>>q>>N;

    vector<string>lis;
    lis.pb(p);lis.pb(q);

    vector<vector<string>>X(N),Y(N);
    rep(i,N){
        int m;cin>>m;
        while(m--){
            string s,t;
            cin>>s>>t;
            X[i].pb(s);
            Y[i].pb(t);
            lis.pb(s);lis.pb(t);
        }
    }

    sort(all(lis));lis.erase(unique(all(lis)),lis.end());

    P=lower_bound(all(lis),p)-lis.begin();
    Q=lower_bound(all(lis),q)-lis.begin();

    rep(i,N){
        rep(j,X[i].size()){
            A[i].pb(lower_bound(all(lis),X[i][j])-lis.begin());
            B[i].pb(lower_bound(all(lis),Y[i][j])-lis.begin());
        }
    }

    solve();
    return 0;
}