#include<stdio.h>
#include<malloc.h>
#include<string.h>
struct Stack
{
int t, c;
char* arr;
};
struct Stack* create(int c)
{
struct Stack
*S
= (struct Stack
*) malloc(sizeof(struct Stack
)); S->t = -1;
S->c = c;
S
->arr
= (char*)malloc(sizeof(char)* S
->c
); return S;
}
int isEmpty(struct Stack *S)
{
return S->t == -1;
}
char pop(struct Stack *S)
{
if (!isEmpty(S))
return S->arr[S->t--];
}
void push(struct Stack *S, char op)
{
S->arr[++S->t] = op;
}
int match(char a, char b)
{
if (a == '(' && b == ')')
return 1;
else if (a == '{' && b == '}')
return 1;
else if (a == '[' && b == ']')
return 1;
else
return 0;
}
{
struct Stack* S = create(n);
if (!S)
return 0;
int i;
{
if (exp[i
] == '(' || exp[i
] == '{' || exp[i
] == '[')
if (exp[i
] == ')' || exp[i
] == '}' || exp[i
] == ']') {
if (S == NULL)
return 0;
else if (! match
(exp[i
], pop
(S
))) return 0;
}
i++;
}
if (S == NULL) return 1;
else return 0;
}
int main()
{
else
return 0;
}
CiNpbmNsdWRlPHN0ZGlvLmg+CiNpbmNsdWRlPG1hbGxvYy5oPgojaW5jbHVkZTxzdHJpbmcuaD4KCnN0cnVjdCBTdGFjawp7CglpbnQgdCwgYzsKCWNoYXIqIGFycjsKfTsKCnN0cnVjdCBTdGFjayogY3JlYXRlKGludCBjKQp7CglzdHJ1Y3QgU3RhY2sgKlMgPSAoc3RydWN0IFN0YWNrKikgbWFsbG9jKHNpemVvZihzdHJ1Y3QgU3RhY2spKTsKCVMtPnQgPSAtMTsKCVMtPmMgPSBjOwoJUy0+YXJyID0gKGNoYXIqKW1hbGxvYyhzaXplb2YoY2hhcikqIFMtPmMpOwoJcmV0dXJuIFM7Cn0KCmludCBpc0VtcHR5KHN0cnVjdCBTdGFjayAqUykKewoJcmV0dXJuIFMtPnQgPT0gLTE7Cn0KCmNoYXIgcG9wKHN0cnVjdCBTdGFjayAqUykKewoJaWYgKCFpc0VtcHR5KFMpKQoJCXJldHVybiBTLT5hcnJbUy0+dC0tXTsKfQoKdm9pZCBwdXNoKHN0cnVjdCBTdGFjayAqUywgY2hhciBvcCkKewoJUy0+YXJyWysrUy0+dF0gPSBvcDsKfQoKaW50IG1hdGNoKGNoYXIgYSwgY2hhciBiKQp7CglpZiAoYSA9PSAnKCcgJiYgYiA9PSAnKScpCgkJcmV0dXJuIDE7CgllbHNlIGlmIChhID09ICd7JyAmJiBiID09ICd9JykKCQlyZXR1cm4gMTsKCWVsc2UgaWYgKGEgPT0gJ1snICYmIGIgPT0gJ10nKQoJCXJldHVybiAxOwoJZWxzZQoJCXJldHVybiAgMDsKfQoKCmludCBmdW4oY2hhciogZXhwKQp7CglpbnQgbiA9IHN0cmxlbihleHApOwoJc3RydWN0IFN0YWNrKiBTID0gY3JlYXRlKG4pOwoJaWYgKCFTKQoJCXJldHVybiAwOwoJaW50IGk7Cgl3aGlsZShleHBbaV0pCgl7CgkJaWYgKGV4cFtpXSA9PSAnKCcgfHwgZXhwW2ldID09ICd7JyB8fCBleHBbaV0gPT0gJ1snKQoJCQlwdXNoKFMsIGV4cFtpXSk7CgoJCWlmIChleHBbaV0gPT0gJyknIHx8IGV4cFtpXSA9PSAnfScgfHwgZXhwW2ldID09ICddJykKCQl7CgkJCWlmIChTID09IE5VTEwpCgkJCQlyZXR1cm4gMDsKCgkJCWVsc2UgaWYgKCEgbWF0Y2goZXhwW2ldLCBwb3AoUykpKQoJCQkJcmV0dXJuIDA7CgkJfQoJCWkrKzsKCX0KCWlmIChTID09IE5VTEwpIHJldHVybiAxOwoJZWxzZSByZXR1cm4gMDsKfQoKCmludCBtYWluKCkKewoJY2hhciBleHBbXSA9ICJ7KCl9W10iOwppbnQgYT1mdW4oZXhwKTsKcHJpbnRmKCIlZCIsYSk7CglpZiAoZnVuKGV4cCkpCgkJcHJpbnRmKCJCYWxhbmNlZCIpOwoJZWxzZQoJCXByaW50ZigiTm90IEJhbGFuY2VkIik7CgoJcmV0dXJuIDA7Cn0KCgoKCg==