#include int cards[53][4], n; int dfs(int x) { int i, ma = 0, t; for (i = 0; i < n; i++) if (cards[i][3] == 0) if ((cards[x][0] == cards[i][0]) || (cards[x][1] == cards[i][1])) { cards[i][3] = 1; t = dfs(i); if (t > ma) ma = t; } return t + 1; } int main() { int i, j, obchod[53], count, obchodchik, answer, k; char c1, c2; while (scanf("%d", &n) != EOF) { if (n == 1) { printf("YES\n"); continue; } scanf("%c", &c1); for (i = 0; i < n; i++) { scanf("%c%c", &c1, &c2); scanf("%c"); //printf("%c%c ", c1, c2); cards[i][0] = (int)c1; cards[i][1] = (int)c2; cards[i][2] = 0; cards[i][3] = 0; } count = 0; obchod[0] = 0; obchodchik = 0; cards[0][3] = 1; //for (i = 0; i < n; i++) printf("((cards[i][0] == cards[j][0]) || (cards[i][1] == cards[j][1]))%d. %c%c - %d %d\n", i, (char)cards[i][0], (char)cards[i][1], cards[i][2], cards[i][3]); while (obchodchik <= count) { for (i = 0; i < n; i++) if (cards[i][3] == 0) if ((cards[obchod[obchodchik]][0] == cards[i][0]) || (cards[obchod[obchodchik]][1] == cards[i][1])) { //printf("nomer %d stepen %d\n", cards[i][2]); cards[i][3] = 1; obchod[++count] = i; } obchodchik++; } //for (i = 0; i < n; i++) printf("%d. kod %d %d - stepen %d obchod %d\n", i, cards[i][0], cards[i][1], cards[i][2], cards[i][3]); if (count < (n - 1)) { printf("NO\n"); continue; } /*for (i = 0; i < n; i++) for (j = 0; j < n; j++) if ((i != j) && ((cards[i][0] == cards[j][0]) || (cards[i][1] == cards[j][1]))) cards[i][2]++; for (i = 0; i < n; i++) printf("%d. kod %d %d - stepen %d obchod %d\n", i, cards[i][0], cards[i][1], cards[i][2], cards[i][3]); zeros = 0; odd = 0; for (i = 0; i < n; i++) { if (cards[i][2] == 0) zeros++; if ((cards[i][2] % 2) == 1) odd++; }*/ k = 0; for (i = 0; i < n; i++) { k = dfs(i); if (k > answer) answer = k; } if (answer = n - 1) printf("YES\n"); else printf("NO\n"); } return 0; }