#include #include using namespace std; typedef struct card { char rank, suit; bool used = false; } Card; vector cards; bool done = false; bool recursion(int depth, Card * parent) { if (done) return true; if (depth == cards.size()) { done = true; return true; } bool ret = false; for (const auto & card : cards) { if (done) return true; if (card->used == false) { if (parent != NULL) if (card->rank != parent->rank && card->suit != parent->suit) continue; card->used = true; ret = ret || recursion(depth + 1, card); card->used = false; } } return ret; } int main(int argc, char ** argv) { int n; while (cin >> n) { done = false; for (int i = 0; i < n; ++i) { char c; Card * temp = new Card(); scanf("%c%c%c", &c, &temp->rank, &temp->suit); cards.push_back(temp); } bool a = recursion(0, NULL); if (a) cout << "YES" << endl; else cout << "NO" << endl; cards.clear(); } return 0; }