107 lines
1.5 KiB
C++
107 lines
1.5 KiB
C++
#include <iostream>
|
|
using namespace std;
|
|
#include <cstdio>
|
|
#include <cstring>
|
|
|
|
int d[5],len;
|
|
bool flag;
|
|
|
|
void wrongpr()
|
|
{
|
|
cout<<"NO"<<"\n";
|
|
flag=false;
|
|
return;
|
|
}
|
|
|
|
void check(int x)
|
|
{
|
|
for (int i=1; i<x; i++)
|
|
if (d[i]!=0)
|
|
{
|
|
wrongpr();
|
|
return;
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
int n;
|
|
cin>>n;
|
|
string s;
|
|
getline(cin,s);
|
|
for (int i=1; i<=n; i++)
|
|
{
|
|
len=0; memset(d,0,sizeof(d)); flag=true;
|
|
string s;
|
|
getline(cin,s);
|
|
s="L"+s;
|
|
char as[256];
|
|
for (int i=1; i<=s.size()-1; i++)
|
|
{
|
|
if (not flag) break;
|
|
switch (s[i])
|
|
{
|
|
case '<':
|
|
{
|
|
len++; as[len]='<';
|
|
d[1]++;
|
|
break;
|
|
}
|
|
case '(':
|
|
{
|
|
check(2);
|
|
len++; as[len]='(';
|
|
d[2]++;
|
|
break;
|
|
}
|
|
case '[':
|
|
{
|
|
check(3);
|
|
len++; as[len]='[';
|
|
d[3]++;
|
|
break;
|
|
}
|
|
case '{':
|
|
{
|
|
check(4);
|
|
len++; as[len]='{';
|
|
d[4]++;
|
|
break;
|
|
}
|
|
case '>':
|
|
{
|
|
if ((as[len]!='<')||(d[1]==0)) wrongpr();
|
|
len--;
|
|
d[1]--;
|
|
break;
|
|
}
|
|
case ')':
|
|
{
|
|
if ((as[len]!='(')||(d[2]==0)) wrongpr();
|
|
len--;
|
|
d[2]--;
|
|
break;
|
|
}
|
|
case ']':
|
|
{
|
|
if ((as[len]!='[')||(d[3]==0)) wrongpr();
|
|
len--;
|
|
d[3]--;
|
|
break;
|
|
}
|
|
case '}':
|
|
{
|
|
if ((as[len]!='{')||(d[4]==0)) wrongpr();
|
|
len--;
|
|
d[4]--;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (len!=0&&flag) wrongpr();
|
|
if (flag) cout<<"YES"<<"\n";
|
|
}
|
|
cout<<"\n";
|
|
}
|
|
|
|
|