#include #include #include using namespace std; struct Stack { vector A; int k = 0; void push(char n) { A.push_back(n); k = k + 1; } char back() const { return A[k - 1]; } char pop() { char t = back(); k = k - 1; A.pop_back(); return t; } int size() const { return k; } void clear() { k = 0; A.clear(); } }; int main() { Stack st; string s; cin >> s; bool error = false; for (char c : s) { if (c == '(' || c == '[' || c == '{') { st.push(c); } if (c == ')') { if (st.size() == 0) { error = true; break; } else if (st.back() == '(') { st.pop(); } else { error = true; break; } } if (c == ']') { if (st.size() == 0) { error = true; break; } else if (st.back() == '[') { st.pop(); } else { error = true; break; } } if (c == '}') { if (st.size() == 0) { error = true; break; } else if (st.back() == '{') { st.pop(); } else { error = true; break; } } } if (st.size() != 0) { error = true; } if (error) { cout << "no"; } else { cout << "yes"; } return 0; }