#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
char b[256][256];
int result[256];
int kuohao(char str[])//这里使用模块化,程序太长了,自上而下逐步细化
{
int stack[21];
char a[]={'{','[','(','<','}',']',')','>'};
int b[300];
int i,len,top=0;
len=strlen(str);
for( i=0;i<len;i++)
for(int j=0;j<8;j++)
if(str[i]==a[j])
{
b[i]=j;建立映射
break;//跳出内循环
}
for( i=0;i<len;i++)//判断是否匹配
{
if(b[i]<=3)//b[i]元素入栈
{
if(top==0||b[i]>=stack[top])//b[i]元素可以入栈
{
top++;
stack[top]=b[i];
}
else//元素无法入栈,说明该组数据非法
return 0;
}
else if(b[i]>=4)//判断是否配对
{
if(top>0&&stack[top]+4==b[i])//可以配对
top--;
else return 0;
}
}
if(top!=0) return 0;
else return 1;
}
int main()
{
int n,i;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>b[i];
result[i]=kuohao(b[i]);
}
for(i=1;i<=n;i++)
{
if(result[i]==0)
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
}
return 0;
}