/* -*- coding: utf-8 -*- * * 3171.cc: No.3171 Color Restoration - yukicoder */ #include #include #include #include using namespace std; /* constant */ const int N = 3; const int MAX_K = 9; string cls[] = { "gray", "brown", "green", "cyan", "blue", "violet", "yellow" ,"orange", "red" }; const string ts[N][MAX_K] = { {"gray", "brown", "green", "cyan", "blue", "yellow", "orange", "red"}, {"gray", "green", "blue", "yellow", "red"}, {"gray", "green", "cyan", "blue", "violet", "orange", "red"} }; /* typedef */ using vi = vector; using vvi = vector; /* global variables */ vi tvs[N], ccs[N]; int cids[N], ps[N]; bool es[N][N]; /* subroutines */ int colorid(const string &s) { for (int i = 0; i < MAX_K; i++) if (s == cls[i]) return i; return -1; } bool find(int cid, int j) { for (auto c: tvs[j]) if (cid == c) return true; return false; } /* main */ int main() { for (int i = 0; i < N; i++) for (int j = 0; j < MAX_K && ! ts[i][j].empty(); j++) tvs[i].push_back(colorid(ts[i][j])); for (int i = 0; i < N; i++) { char s[16]; scanf("%s", s); string w(s); cids[i] = colorid(w); for (int j = 0; j < N; j++) es[i][j] = find(cids[i], j); } for (int i = 0; i < N; i++) ps[i] = i; vvi res; do { bool ok = true; for (int i = 0; ok && i < N; i++) ok = es[i][ps[i]]; if (ok) { vi v(N); for (int i = 0; i < N; i++) v[ps[i]] = cids[i]; res.push_back(v); } } while (next_permutation(ps, ps + N)); sort(res.begin(), res.end()); res.erase(unique(res.begin(), res.end()), res.end()); if (res.size() == 1) puts("Yes"); else puts("No"); return 0; }