#include <stdio.h>
#include <stdint.h>
#include <limits.h>
#include <unistd.h>

#define push(a, b)  *a = b; a++
#define pop(a, b)   a--; b = *a

const char n[] = {'N', 'O'};
const char y[] = {'Y', 'E', 'S'};

unsigned char arr[100*1024+1] = {};

int main(void)
{
  unsigned char * arr_p= &arr[0];
  unsigned char tmp;
  unsigned char *c = &arr[0];
  
  read(STDIN_FILENO, arr, sizeof(arr));
  
  while (1)
  {
    switch (*c)
    {
      case '<':
      case '{':
      case '[':
      case '(':
        push (arr_p, *c);
        break;
        
      case '>':
      case '}':
      case ']':
        pop (arr_p, tmp);
        if (tmp != *c - 2)
        {
          write(STDOUT_FILENO, n, sizeof(n));
          return 0;
        }
        break;
        
      case ')':
        pop (arr_p, tmp);
        if (tmp != *c - 1)
        {
          write(STDOUT_FILENO, n, sizeof(n));
          return 0;
        }
        break;
        
      default:
        if ( arr_p != &arr[0] )
          write(STDOUT_FILENO, n, sizeof(n));
        else
          write(STDOUT_FILENO, y, sizeof(y));
        return 0;
      }
      ++c;
  }
  return 0;
}