#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace atcoder; using namespace std; using ll = long long; using ull = unsigned long long; template using max_heap = priority_queue; template using min_heap = priority_queue, greater<>>; ll ll_min = numeric_limits::min(); ll ll_max = numeric_limits::max(); ll ALPHABET_N = 26; using mint = modint998244353; #define rep(i, n) for (ll i = (ll)0; i < (ll)n; i++) #define rep_(i, k, n) for (ll i = (ll)k; i < (ll)n; i++) #define all(a) a.begin(), a.end() int main() { ll t; cin >> t; rep(_, t) { ll n; cin >> n; bool flag_a = false, flag_b = false; string tgt = ""; vector A(n), B(n); rep(i, n) cin >> A[i] >> B[i]; rep(i, n) { if (A[i] == "a") { if (B[i].size() > 1 && find(all(B[i]), 'a') != B[i].end()) { flag_a = true; } else if (!flag_a && all_of(all(B[i]), [](char c) { return c == 'b'; })) { flag_b = true; if (tgt.size() < B[i].size()) { tgt = B[i]; } } } } if (flag_a) { cout << "Yes" << endl; continue; } if (!flag_a && !flag_b) { cout << "No" << endl; continue; } ll b_len1 = tgt.size() - 1; bool ok = false; rep(i, n) { if (all_of(all(A[i]), [](char c) { return c == 'b'; }) && all_of(all(B[i]), [](char c) { return c == 'b'; }) && B[i].size() > A[i].size() && tgt.find(A[i]) != string::npos) { ok = true; break; } else if (tgt.find(A[i]) != string::npos && B[i].find('a') != string::npos) { if (b_len1 + (B[i].size() - 1) > 0) { ok = true; break; } } } cout << (ok ? "Yes" : "No") << endl; } return 0; }