#include <iostream>
#include <vector>
#include <stack>
#include <string>
#include <algorithm>
using namespace std;
vector<string> braces(vector<string> values){
vector<string> res;
for(int i=0;i<values.size();i++){
stack<char> s;
char c;
string flag = "YES";
string str = values[i];
for(int j=0;j<str.size();j++){
if(str[j] == '{' || str[j] == '[' || str[j] == '('){
s.push(str[j]);
}
else if(~s.empty()){
c = s.top();
s.pop();
if( (str[j] == '}' && c == '{')||(str[j] == ']' && c == '[')||(str[j] == ')'&&c == '('))
{}
else{
flag = "NO";
break;
}
}
else{
flag = "NO";
break;
}
}
res.push_back(flag);
}
return res;
}
int main(){
int N;
while(cin >> N){
string str;
vector<string> _values,_res;
for(int i=0;i<N;i++){
cin >> str;
_values.push_back(str);
}
_res = braces(_values);
for(int j=0;j<_res.size();j++){
cout << _res[j] << endl;
}
}
return 0;
}
示例:
1
()
YES
2
{}[]()
{[}]
YES
NO
2
{}[]()
{[}]}
YES
NO