#include <iostream>
#include <stack>
using namespace std;
void solve(string &s){
stack<char> cur;
for(int i = 0; i < s.size(); i++){
if(!cur.empty() && ((cur.top() == '(' && s[i] == ')') || (cur.top() == '{' && s[i] == '}') || (cur.top() == '[' && s[i] == ']')))
cur.pop();
else cur.push(s[i]);
}
if(cur.empty()) cout << "YES";
else cout << "NO";
}
signed main() {
string str;
cin >> str;
solve(str);
}
<head>
</head>
<body>
<p style="text-align: center">
Замыкание в Java Script для непосвященных.
</p>
<p align="left">
Появление «настоящих» замыканий в Java может спровоцировать волну новых споров о «чистоте» вроде споров об универсальных типах.
</p>
<p align="right">
Однако здесь снова всё неоднозначно, поскольку замыкания — идея очень простая, однако вместе с тем достаточно мощная.
</p>
<hr />
<div align="right">
<p>
В этой статье я кратко расскажу о замыканиях для Java, которые, возможно, появятся уже в JDK 7.
</p>
<p>
Скачать текущий прототип для экспериментов вот тут.
</p>
</div>
</body>
</html>