// // main.cpp // prob1_2 // // Created by Nasca Sergiu Alin on 14/05/16. // Copyright © 2016 Nasca Sergiu Alin. All rights reserved. // #include #include #include using namespace std; char a[5000]; vector b,c; int main(int argc, const char * argv[]) { int n, suma, par, start, stop; bool ok; cin >> n; for(int k = 1; k <= n; ++k) { cin >> a; b.clear(); c.clear(); suma = 0; par = 0; ok = true; for(int i = 0; i < strlen(a); ++i) { if(a[i] == '(') { b.push_back(1); c.push_back(1); suma += 1; } if(a[i] == ')') { if(c.size() != 0 && c[c.size()-1] != 1) { ok = false; } else suma -= 1; b.push_back(-1); c.pop_back(); } if(a[i] == '[') { b.push_back(2); c.push_back(2); suma += 2; } if(a[i] == ']') { if(c.size() != 0 && c[c.size()-1] != 2) { ok = false; } else suma -= 2; b.push_back(-2); c.pop_back(); } if(a[i] == '{') { b.push_back(3); c.push_back(3); suma += 3; } if(a[i] == '}') { if(c.size() != 0 && c[c.size()-1] != 3) { ok = false; } else suma -= 3; b.push_back(-3); c.pop_back(); } if(a[i] == '|') { b.push_back(0); par = par + 1; } if(suma < 0) { ok = false; break; } } start = 0; stop = b.size()-1; for(int i = 1; i <= par/2; ++i) { while(b[start] != 0) { start++; } while(b[stop] != 0) { stop--; } if((start == 0 && stop != 0) || (start != 0 && stop == 0)) { ok = false; } else { if(b[start] + b[stop] != 0) { ok = false; } } } if(suma != 0) { ok = false; } if(ok && par % 2 == 0) { cout << "YES\n"; } else cout << "NO\n"; } return 0; }