#include <iostream>
#include <stack>
#include <string>
using namespace std;
string canUntangleWires(const string& sequence) {
stack<char> s;
for (char ch : sequence) {
// If the stack is not empty and the top character is the same as the current one,
// pop the top character (i.e., they cancel each other out).
if (!s.empty() && s.top() == ch) {
s.pop();
} else {
// Otherwise, push the current character onto the stack.
s.push(ch);
}
}
// If the stack is empty, all crossings are resolved
return s.empty() ? "Yes" : "No";
}
int main() {
string sequence;
cin >> sequence;
cout << canUntangleWires(sequence) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDxzdHJpbmc+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RyaW5nIGNhblVudGFuZ2xlV2lyZXMoY29uc3Qgc3RyaW5nJiBzZXF1ZW5jZSkgewogICAgc3RhY2s8Y2hhcj4gczsKCiAgICBmb3IgKGNoYXIgY2ggOiBzZXF1ZW5jZSkgewogICAgICAgIC8vIElmIHRoZSBzdGFjayBpcyBub3QgZW1wdHkgYW5kIHRoZSB0b3AgY2hhcmFjdGVyIGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IG9uZSwKICAgICAgICAvLyBwb3AgdGhlIHRvcCBjaGFyYWN0ZXIgKGkuZS4sIHRoZXkgY2FuY2VsIGVhY2ggb3RoZXIgb3V0KS4KICAgICAgICBpZiAoIXMuZW1wdHkoKSAmJiBzLnRvcCgpID09IGNoKSB7CiAgICAgICAgICAgIHMucG9wKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBwdXNoIHRoZSBjdXJyZW50IGNoYXJhY3RlciBvbnRvIHRoZSBzdGFjay4KICAgICAgICAgICAgcy5wdXNoKGNoKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gSWYgdGhlIHN0YWNrIGlzIGVtcHR5LCBhbGwgY3Jvc3NpbmdzIGFyZSByZXNvbHZlZAogICAgcmV0dXJuIHMuZW1wdHkoKSA/ICJZZXMiIDogIk5vIjsKfQoKaW50IG1haW4oKSB7CiAgICBzdHJpbmcgc2VxdWVuY2U7CiAgICBjaW4gPj4gc2VxdWVuY2U7CiAgICBjb3V0IDw8IGNhblVudGFuZ2xlV2lyZXMoc2VxdWVuY2UpIDw8IGVuZGw7CiAgICByZXR1cm4gMDsKfQ==