#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
typedef struct Node{
int data;
struct Node * pNext;
}NODE,*PNODE;
typedef struct Stack{
PNODE pTop;
PNODE pBottom;
}STACK,*PSTACK;
void Ini(PSTACK);
void Push(PSTACK,char);
bool is_empty(PSTACK);
bool matching_progress(char*);
bool Pop(PSTACK,char*);
int main() {
char str[100];
//scanf("%s",str);
gets(str);
/* if(str[0]==')'||str[0]==']'||str[0]=='}'){
printf("括号不匹配");
}*/
if(matching_progress(str))
printf("right");
else printf("wrong");
return 0;
}
void Ini(PSTACK pS){
pS->pTop=(PNODE)sizeof(NODE);
if(pS->pTop==NULL) {printf("动态分配内存失败");exit(-1);}
pS->pBottom=pS->pTop;
pS->pTop->pNext=NULL;
}
void Push(PSTACK pS,char val){
PNODE pNew=(PNODE)malloc(sizeof(NODE));
pNew->data=val;
pNew->pNext=pS->pTop;
pS->pTop=pNew;
}
bool is_empty(PSTACK pS){
if(pS->pTop==pS->pBottom) return true;
else return false;
}
bool Pop(PSTACK pS,char*pVal){
if(is_empty(pS)){
return false;
}
else {
PNODE r=pS->pTop;
*pVal=r->data;
pS->pTop=r->pNext;
free(r);
r=NULL;
return true;
}
}
bool matching_progress(char *abc){
STACK S;
Ini(&S);
char b;
int i;
for(i=0;i<strlen(abc);i++){
switch(abc[i]){
case'{':
case'[':
case'(':
Push(&S, abc[i]);
break;
case'}':
if(is_empty(&S)) return false;
else{
Pop(&S, &b);
if(b!='{') return false;
break;
}
case']':
if(is_empty(&S)) return false;
else{
Pop(&S, &b);
if(b!='[') return false;
break;
}
case')':
if(is_empty(&S)) return false;
else{
Pop(&S, &b);
if(b!='(') return false;
break;
}
default:break;
}
}
if(is_empty(&S)==0) return false;
else return true;
}