#include<stdio.h>
#include<string.h>

#define N 100

void push(int *stack,int data,int *sp);
int pop(int *stack,int *sp);

int main(void){
  char str[128];
  int i,j,stack[N],sp,l,out,d;
  while(fgets(str,sizeof(str),stdin)&&str[0]!='.'){
    for(i=0;i<N;i++) stack[i]=0;
    sp=d=0;
    l=strlen(str);
    for(i=0;i<l;i++){
      if(str[i]=='('){
	push(stack,1,&sp);
      }else if(str[i]==')'){
	//puts("out:1");
	out=pop(stack,&sp);
	//printf("%d\n",out);
	if(out!=1){
	  d++;
	  goto shut;
	}
      }else if(str[i]=='['){
	push(stack,2,&sp);
      }else if(str[i]==']'){
	//puts("out:2");
	out=pop(stack,&sp);
	//printf("%d\n",out);
	if(out!=2){
	  d++;
	  goto shut;
	}
      }
    } 
  shut:
    if(d!=0) puts("NO");
    else puts("YES");
  }
  return 0;
}
      
void push(int *stack,int data,int *sp){
  stack[(*sp)++]=data;
}

int pop(int *stack,int *sp){
  if(*sp>0) return stack[--(*sp)];
  else return 0;
}