#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;

int32_t main()
{
	
string s;
cin>>s;

bool ok=true;

for(int i=0;i<s.length();i++)
{
	if(i%2==1)
	{
		if(islower(s[i]))
			ok=false;
	}
	else if(i%2==0)
	{
		if(isupper(s[i]))
			ok=false;
	}

}

if(ok)
	cout<<"Yes"<<"\n";
else
	cout<<"No"<<"\n";




}


#include <bits/stdc++.h>
using namespace std;

void DBG() { cerr << endl; }
template<class Head, class... Tail>
void DBG(Head H, Tail... T) { cerr << ' ' << H; DBG(T...); }
#define dbg(...) cerr << "(" << (#__VA_ARGS__) << "):", DBG(__VA_ARGS__)

using ll = long long;
using ld = long double;

#define sqr(a) ll(a) * (a)
#define siz(a) int(a.size())
#define ints(a...) int a; read(a)
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define trav(i, v) for (const auto i : v)
#define fill(a, b) memset(a, b, sizeof(a))
#define rep(i, b, n) for (auto i = b; i < n; i++)
#define per(i, b, n) for (auto i = b; i >= n; i--)
#define unify(a) sort(all(a)); a.resize(unique(all(a)) - a.begin())

template <class T> using vec = vector<T>;
template <class... Args> inline void read(Args&... args) { ((cin >> args), ...); }
template <class... Args> inline void show(Args... args) { ((cout << args << " "), ...); }
template <class T1, class T2> inline bool ckmin(T1 &a, T2 b) { return a > b ? a = b, 1 : 0; }
template <class T1, class T2> inline bool ckmax(T1 &a, T2 b) { return a < b ? a = b, 1 : 0;  }
template <class T> inline void operator>> (istream& in, vector<T>& v) { rep(i, 0, siz(v)) in >> v[i]; }
template <class T> inline void operator<< (ostream& out, const vector<T>& v) { rep(i, 0, siz(v)) out << v[i] << " \n"[i + 1 == siz(v)]; }

const int MOD = 998244353;

struct Mod {
    template<typename T>
    T add(int64_t a, T b) { a += b; if (a >= MOD) a -= MOD; return a; }

    template<typename T>
    T sub(T a, T b) { a = a - b; if (a < 0) a += MOD; return a; }

    template<typename T>
    T mul(T a, T b) { return 1ll * a * b % MOD; }

    int64_t pow_n(int64_t a, int64_t p, const int mod = MOD) {
        int64_t ans = 1;
        a %= mod;
        while (p > 0) {
            if (p & 1) ans = ans * a % mod;
            a = a * a % mod;
            p >>= 1;
        }
        return ans;
    }

    template<typename T>
    T inv(T a) { return pow_n(a, MOD - 2); }

    template<typename T>
    T div(T a, T b) { return mul(a, inv(b)); }
} M;

void solve() {
    vec<ll> v(3);
    cin >> v;
    ll res = 1;
    rep(i, 0, 3) {
        ll a = v[i];
        ll b = v[i] + 1;
        if (a % 2 == 0)
            a /= 2;
        else
            b /= 2;
        res = M.mul(res, M.mul(a, b));
    }
    cout << res << '\n';
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout << fixed << setprecision(12);
    cerr << fixed << setprecision(12);
    int _ = 1;
    // cin >> _;
    rep(i, 1, _ + 1) {
        // printf("Case %d: ", i);
        solve();
    }
    return 0;
}