#include #include #include #include using namespace std; char f (char a) { if(a=='A') return 0; if(a=='X') return 9; if(a=='J') return 10; if(a=='Q') return 11; if(a=='K') return 12; return a-'1'; } int main() { long long n; while(cin >> n) { vector> v(4); vector> vv(13); string s; for(int i = 0; i> s; switch(s[1]) { case 'C': v[0].insert(f(s[0])); vv[f(s[0])].insert(0); break; case 'D': v[1].insert(f(s[0])); vv[f(s[0])].insert(1); break; case 'H': v[2].insert(f(s[0])); vv[f(s[0])].insert(2); break; case 'S': v[3].insert(f(s[0])); vv[f(s[0])].insert(3); break; } } int m = 0; for(int i = 0; i<13; i++) { if(vv[i].size() > vv[m].size()) { m = i; } } int zer = 0; for(int i = 0; i<4; i++) { if(v[i].size()) zer++; } if(zer == 3) { cout << "YES\n"; } else if(vv[m].size() == 4) { bool ok = false; for(int i = 0; i<13; i++) { if(vv[i].size() >=2 && i!=m) { ok=true; } } int ones = 0; for(int i = 0; i<4; i++) { if(v[i].size() == 1) ones++; } if(ones >= 2) ok=true; if(ok) { cout << "YES\n"; } else cout << "NO\n"; } else if(vv[m].size() == 3) { bool ok = false; if(zer == 1) { for(int i = 0 ; i<13; i++) { if(vv[i].size()>=2 && i!=m) ok=true; } for(int i = 0; i<4; i++) { if(v[i].size() == 1) ok =true; } } else { int vrch; for(int i = 0; i<4; i++) { if(vv[m].find(i) == vv[m].end()) vrch=i; } for(auto i: v[vrch]) { if(vv[i].size() >= 2) ok =true; } } if(ok) { cout << "YES\n"; } else cout << "NO\n"; } else if(vv[m].size() == 2) { bool ok = true; vector> ma(4, vector(4,0)); for(int i = 0; i<13; i++) { if(vv[i].size() == 2) { int a = *(vv[i].begin()), b = *(vv[i].rbegin()); ma[a][b]=1; ma[b][a]=1; } } vector reach(4); queue q; reach[*(vv[m].begin())] = 1; q.push(*(vv[m].begin())); while(!q.empty()) { int a = q.front(); q.pop(); for(int i = 0; i<4; i++) { if(ma[a][i] && !reach[i]) { q.push(i); reach[i]=1; } } } for(int i = 0; i<4; i++) { if(!reach[i] && v[i].size()) ok=false; } if(ok) { cout << "YES\n"; } else cout << "NO\n"; } else { cout << "NO\n"; } } }