#include <bits/stdc++.h>
using namespace std;
template <typename T1, typename T2>
std::ostream &operator<<(std::ostream &os, const std::pair<T1, T2> &v) {
  os << "(" << v.first << "," << v.second << ")";
  return os;
}
template <typename T>
std::ostream &operator<<(std::ostream &os, const std::vector<T> &v) {
  for (auto && (x) : (v)) {
    os << x << ",";
  }
  return os;
}
const long long mod = 1000000007;
const long double pi = 3.14159265358979323846264338327950288419716939937510;
long long po(long long a, long long b) {
  long long res = 1 % mod;
  a %= mod;
  for (; b; b >>= 1) {
    if (b & (1LL)) res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}
const long double eps = 1e-10;
const int oo = 1000000009;
const long long ooo = 2e18 + 5;
long long sl() {
  int c = getchar();
  while ((c < '0' || c > '9') && c != '-') {
    c = getchar();
  }
  bool sign = 0;
  if (c == '-') {
    sign = 1;
    c = getchar();
  }
  long long ret = 0;
  while (c >= '0' && c <= '9') {
    ret = 10 * ret + c - 48;
    c = getchar();
  }
  if (sign) return -ret;
  return ret;
}
int ss(char *s) {
  int n = 0;
  int c = getchar();
  while (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))) c = getchar();
  while (((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))) {
    s[n] = (char)(c);
    n++;
    c = getchar();
  }
  return n;
}
int main() {
  srand((unsigned int)time(0));
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  string s;
  cin >> s;
  int n = ((int)(s).size());
  stack<char> a;
  for (int i = 0; i <= n - 1; i++) {
    if ((!a.empty()) && a.top() == s[i]) {
      a.pop();
    } else {
      a.push(s[i]);
    }
  }
  if (!a.empty())
    cout << "No" << '\n';
  else
    cout << "Yes" << '\n';
  return 0;
}
