# Include <stdio. h> # include <stdlib. h> # define stack_size 100 # define overflow-2 # define OK 1 # define true 1 # define false 0 typedef char datatype; typedef int status; typestrudef CT {datatype * base; datatype * Top; int stacksize;} seqstack; void initial (seqstack * s) {S-> base = (datatype *) malloc (stack_size * sizeof (datatype); If (! S-> base) Exit (-1); s-> Top = s-> base; s-> stacksize = stack_size;} status destroystack (seqstack * s) {free (S-> base); s-> base = NULL; s-> Top = NULL; s-> stacksize = 0; Return OK ;} status clearstack (seqstack * s) {S-> Top = s-> base; s-> stacksize = stack_size; Return OK;} status stackempty (seqstack * s) {If (S-> Top = s-> base) return true; else return false;} datatype gettop (seqstack s) {datatype E; E = * (S. top-1); Return e;} int isem Pty (seqstack * s) {return S-> Top = s-> base;} int isfull (seqstack * s) {return S-> top-S-> base = STACK_SIZE-1;} void push (seqstack * s, datatype X) {If (isfull (s )) {printf ("overflow"); exit (1);} else * s-> top ++ = x;} void POP (seqstack * s) {If (isempty (s) {printf ("null"); exit (1);} else -- s-> top;} datatype top (seqstack * s) {If (isempty (s) {printf ("empty"); exit (1);} return * (S-> top-1 );} int match (seqstack * s, Cha R * Str) {char X; int I, flag = 1; for (I = 0; STR [I]! = '\ 0'; I ++) {Switch (STR [I]) {Case' (': Push (S,' ('); break; Case '[': push (S, '['); break; Case '{': Push (S, '{'); break; Case ')': x = Top (s ); pop (s); If (X! = '(') Flag = 0; break; Case ']': x = Top (s); POP (s); If (X! = '[') Flag = 0; break; Case '}': x = Top (s); POP (s); If (X! = '{') Flag = 0; break;} If (! Flag) break;} If (isempty (S) = 1 & flag) return 1; elsereturn 0;} int main () {int T; scanf ("% d % * C", & T); While (t --) {seqstack S, * st; ST = & S; char STR [1, 100]; initial (ST); gets (STR); If (MATCH (St, STR) printf ("OK \ n"); elseprintf ("error \ n ");} return 0 ;}