#include <iostream>
#include <string>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
list<string> bracesExpressionExamples = {
"({[{}]{}[]})",
"({}}{[{}]{}[]})",
"({[{}]{}[]}",
"({[{}]{}]})",
"({[{}{}[]})",
"",
"{}"
};
bool is_balanced(std::string s) {
int counts[3] = {0};
for (char ch : s) {
switch (ch) {
case '(': counts[0]++; break;
case ')': counts[0]--; break;
case '[': counts[1]++; break;
case ']': counts[1]--; break;
case '{': counts[2]++; break;
case '}': counts[2]--; break;
default: break;
}
}
return counts[0] + counts[1] + counts[2] == 0;
}
int main(int, char**) {
cout << boolalpha;
transform(bracesExpressionExamples.begin(),
bracesExpressionExamples.end(),
ostream_iterator<bool>(cout, "\n"),
is_balanced);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmxpc3Q8c3RyaW5nPiBicmFjZXNFeHByZXNzaW9uRXhhbXBsZXMgPSB7CgkiKHtbe31de31bXX0pIiwKCSIoe319e1t7fV17fVtdfSkiLAoJIih7W3t9XXt9W119IiwKCSIoe1t7fV17fV19KSIsCgkiKHtbe317fVtdfSkiLAoJIiIsCgkie30iCn07Cgpib29sIGlzX2JhbGFuY2VkKHN0ZDo6c3RyaW5nIHMpIHsKCWludCBjb3VudHNbM10gPSB7MH07Cglmb3IgKGNoYXIgY2ggOiBzKSB7CgkJc3dpdGNoIChjaCkgewoJCQljYXNlICcoJzogY291bnRzWzBdKys7IGJyZWFrOwoJCQljYXNlICcpJzogY291bnRzWzBdLS07IGJyZWFrOwoJCQljYXNlICdbJzogY291bnRzWzFdKys7IGJyZWFrOwoJCQljYXNlICddJzogY291bnRzWzFdLS07IGJyZWFrOwoJCQljYXNlICd7JzogY291bnRzWzJdKys7IGJyZWFrOwoJCQljYXNlICd9JzogY291bnRzWzJdLS07IGJyZWFrOwoJCQlkZWZhdWx0OiBicmVhazsKCQl9Cgl9CglyZXR1cm4gY291bnRzWzBdICsgY291bnRzWzFdICsgY291bnRzWzJdID09IDA7Cn0KCmludCBtYWluKGludCwgY2hhcioqKSB7Cgljb3V0IDw8IGJvb2xhbHBoYTsKCXRyYW5zZm9ybShicmFjZXNFeHByZXNzaW9uRXhhbXBsZXMuYmVnaW4oKSwKCQlicmFjZXNFeHByZXNzaW9uRXhhbXBsZXMuZW5kKCksCgkJb3N0cmVhbV9pdGVyYXRvcjxib29sPihjb3V0LCAiXG4iKSwKCQlpc19iYWxhbmNlZCk7CglyZXR1cm4gMDsKfQo=