#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define ls k<<1
#define rs k<<1|1
using namespace std;
const int maxn=2e5+5;
int T,len,tag[maxn<<2],t[maxn<<2];
string s;
vector<int> v;
inline void down(int k,int l,int r){
if(tag[k]){
int mid=l+r>>1;
tag[ls]=tag[rs]=tag[k];
t[ls]+=tag[k]*(mid-l+1);
t[rs]+=tag[k]*(r-mid);
tag[k]=0;
}
}
void change(int k,int l,int r,int x,int y,int v){
if(x<=l&&r<=y){
t[k]+=v*(r-l+1);
tag[k]=v;
return;
}
down(k,l,r);
int mid=l+r>>1;
if(x<=mid)
change(ls,l,mid,x,y,v);
if(mid<y)
change(rs,mid+1,r,x,y,v);
t[k]=min(t[ls],t[rs]);
}
int query(int k,int l,int r,int x,int y){
if(x<=l&&r<=y)
return t[k]-inf;
down(k,l,r);
int mid=l+r>>1,res=inf;
if(x<=mid)
res=min(res,query(ls,l,mid,x,y));
if(mid<y)
res=min(res,query(rs,mid+1,r,x,y));
return res;
}
void solve(){
memset(t,inf,sizeof(t));
memset(tag,0,sizeof(tag));
int cnt=0,qwq=0,siz=0;
v.clear();
for(int i=0;i<len;++i){
if(s[i]=='(')
++cnt;
else if(s[i]=='?'){
v.push_back(i);
++siz;
} else{
--cnt;
if(cnt<0){
if(qwq==siz){
puts("NO");
return;
}
if(!query(1,1,len,1,v[qwq]+1)){
puts("NO");
return;
} else{
change(1,1,len,1,v[qwq]+1,1);
++qwq;
++cnt;
}
}
}
change(1,1,len,i+1,i+1,cnt);
}
if((siz-qwq-cnt)&1){
puts("NO");
return;
}
int a=0,b=0;
int y=(siz-qwq-cnt)>>1;
for(int i=0;i<y;++i){
if(query(1,1,len,1,v[i]+1)){
puts("NO");
return;
}
change(1,1,len,1,v[i]+1,-1);
}
puts("YES");
}
int main(){
cin>>T;
while(T--){
cin>>s;
len=s.size();
solve();
}
return 0;
}