#include<conio.h>
#include<stdio.h>
#include<string.h>
struct stack{ int top;char d[20]; };
typedef struct stack st;
st s;

void push(char z,st *s)
{
 s->d[++s->top]=z;
}

void pop(char z,st *s)
{
 s->top--;
}

void main()
{
 int i,d;
 char ex[20],z;
 clrscr();
 s.top=-1;
 printf("ENTER THE EXPRESSION:");
 gets(ex);
 d=strlen(ex);
 for(i=d;i>=0;i--)
 {
  z=ex[i];
  if(z=='}'||z=='{'||z=='['||z==']'||z=='('||z==')')
  {
   switch(z)
   {
    case ']':
		if(s.d[s.top]=='[') pop(z,&s);
		else printf("NOT A VALID EXPRESSION:");
		break;
    case '}':
		if(s.d[s.top]=='{') pop(z,&s);
		else printf("NOT A VALID EXPRESSION:");
		break;
    case ')':
		if(s.d[s.top]=='(') pop(z,&s);
		else printf("NOT A VALID EXPRESSION:");
		break;
    default:    push(z,&s);
   }
  }
 }
 if(s.top==-1) printf("\n THIS IS A VALID EXPRESSION:");
 else printf("NOT A VALID EXPRESSION:");
 getch();
}
