//Code by Patcas Csaba #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define LL long long #define PII pair #define VB vector #define VI vector #define VD vector #define VS vector #define VPII vector > #define VVI vector < VI > #define VVB vector < VB > #define FORN(i, n) for(int i = 0; i < (n); ++i) #define FOR(i, a, b) for(int i = (a); i <= (b); ++i) #define FORD(i, a, b) for(int i = (a); i >= (b); --i) #define FORI(it, X) for(__typeof((X).begin()) it = (X).begin(); it !=(X).end(); ++it) #define REPEAT do{ #define UNTIL(x) }while(!(x)); #define SZ size() #define BG begin() #define EN end() #define CL clear() #define X first #define Y second #define RS resize #define PB push_back #define MP make_pair #define ALL(x) x.begin(), x.end() #define IN_FILE "a.in" #define OUT_FILE "a.out" int n; string s; bool isValid(string s) { stack ss; FORN(i, s.SZ) { if (s[i] == '(' || s[i] == '[' || s[i] == '{') { ss.push(s[i]); continue; } if (s[i] == ')') { if (ss.empty() || ss.top() != '(') return false; ss.pop(); } if (s[i] == ']') { if (ss.empty() || ss.top() != '[') return false; ss.pop(); } if (s[i] == '}') { if (ss.empty() || ss.top() != '{') return false; ss.pop(); } if (s[i] == '|') { if (!ss.empty() && ss.top() == '|') ss.pop(); else ss.push(s[i]); } } return ss.empty(); } int main() { //Read data //freopen(IN_FILE, "r", stdin); //freopen(OUT_FILE, "w", stdout); //Solve cin >> n; getline(cin, s); FOR(i, 1, n) { getline(cin, s); if (isValid(s)) cout << "YES" << endl; else cout << "NO" << endl; } //Write data return 0; }