#include using namespace std; vector< vector > G; bool vis[100]; void dfs(int u, int p){ if(vis[u]) return; vis[u] = 1; for(int v : G[u]) dfs(v, u); } void process(int n){ vector > v; for(int i = 0; i < n; i++){ string s; cin >> s; v.push_back({s[0], s[1]}); } G = vector< vector >(n); for(int i = 0; i < n; i++) for(int j = i+1; j < n; j ++) if(v[i].first == v[j].first || v[i].second == v[j].second){ G[i].push_back(j); G[j].push_back(i); } memset(vis, 0, sizeof(vis)); dfs(0, -1); bool isCon = true; for(int i = 0; i < n; i ++) if(!vis[i]) isCon = false; isCon? puts("YES") : puts("NO"); } int main () { int n; while(cin >> n){ process(n); } }