#include int cards[53][4], n; int dfs(int x) { int i, ma = 0, t; //printf("dfs %d:\n", x); 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; //printf("Chotim obojti %d\n", i); t = dfs(i); if ((t + 1) > ma) ma = t + 1; } return ma; } int main() { int i, j, obchod[53], k, ma1, ma2, stepen; char c1, c2; while (scanf("%d", &n) != EOF) { for (i = 0; i < n; i++) for (j = 0; j < 4; j++) cards[i][j] = 0; 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; } /*if (n == 1) { printf("YES\n"); continue; }*/ k = 0; cards[0][3] = 1; ma1 = 0; ma2 = 0; stepen = 0; //for (i = 0; i < n; i++) printf("%d. %c%c\n", i, (char)cards[i][0], (char)cards[i][1]); for (i = 1; i < n; i++) if ((cards[0][0] == cards[i][0]) || (cards[0][1] == cards[i][1])) { stepen++; cards[i][3] = 1; k = dfs(i); //printf("oboshli %d - glubina %d\n", i, k); if (k >= ma1) { ma2 = ma1; ma1 = k; } else if (k > ma2) ma2 = k; } if ((stepen == 1) && (ma1 >= (n - 2))) printf("YES\n"); else if ((stepen >= 2) && (ma1 + ma2 >= (n - 3))) printf("YES\n"); else printf("NO\n"); } return 0; }