#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long double ld; typedef long long ll; typedef vector vint; typedef pair pii; typedef pair pll; typedef pair pdd; typedef complex compd; #define reach(i,a) for(auto i:a) #define rep(i,n) for(int i=0;i<(int)n;i++) #define REP(i,n) for(int i=0;i<=(int)n;i++) #define srep(i,a,n) for(int i=a;i<(int)n;i++) #define SREP(i,a,n) for(int i=a;i<=(int)n;i++) #define rrep(i,n) for(int i=n-1;i>=0;i--) #define RREP(i,n) for(int i=n;i>=0;i--) #define all(a) (a).begin(),(a).end() #define mp(a,b) make_pair(a,b) #define mt make_tuple #define pb push_back #define fst first #define scn second int bitcnt(ll x) { x = ((x & 0xAAAAAAAAAAAAAAAA) >> 1) + (x & 0x5555555555555555); x = ((x & 0xCCCCCCCCCCCCCCCC) >> 2) + (x & 0x3333333333333333); x = ((x & 0xF0F0F0F0F0F0F0F0) >> 4) + (x & 0x0F0F0F0F0F0F0F0F); x = ((x & 0xFF00FF00FF00FF00) >> 8) + (x & 0x00FF00FF00FF00FF); x = ((x & 0xFFFF0000FFFF0000) >> 16) + (x & 0x0000FFFF0000FFFF); x = ((x & 0xFFFFFFFF00000000) >> 32) + (x & 0x00000000FFFFFFFF); return x; } int bitcnt(int x) { x = ((x & 0xAAAAAAAA) >> 1) + (x & 0x55555555); x = ((x & 0xCCCCCCCC) >> 2) + (x & 0x33333333); x = ((x & 0xF0F0F0F0) >> 4) + (x & 0x0F0F0F0F); x = ((x & 0xFF00FF00) >> 8) + (x & 0x00FF00FF); x = ((x & 0xFFFF0000) >> 16) + (x & 0x0000FFFF); return x; } ll gcd(ll a, ll b) { return a%b == 0 ? b : gcd(b, a%b); } #define debug(x) cout<<"case #" << x << ": " << endl #define DEBUG 0 const ll inf = 1e9; const ll mod = 1e9 + 7; const ld eps = 1e-15; const int dx[] = { 1,0,-1,0,0 }; const int dy[] = { 0,1,0,-1,0 }; int main() { string p; cin >> p; // 1番下の桁は2,3,4のどれかで無いといけない(0は良い数じゃないから) int under = p[p.size() - 1] - '0'; if (under != 2 && under != 3 && under != 4) { cout << "No" << endl; return 0; } bool usezero[] = { false,false }; int up = 0; rrep(i, p.size()) { int num = p[i] - '0' - up; if (usezero[0] & usezero[1]) { // 0のみOK if (num != 0) { cout << "No" << endl; return 0; } up = 0; } else if (usezero[0]) { // 0,6,7ならOK、upは0に。 up = 0; if (num == 6 || num == 7) continue; else if (num == 0) { usezero[1] = true; } else { cout << "No" << endl; return 0; } } else { // 0,2,4,6,7ならOK。 // 0 if (num == 0) { up = 0; usezero[0] = usezero[1] = true; } // 2(6+6),3(6+7),4(7+7)->up=1に else if (num == 2 || num == 3 || num == 4) { up = 1; } // 6,7(up=0,usezero[0]=trueに) else if (num == 6 || num == 7) { up = 0; usezero[0] = true; } else { cout << "No" << endl; return 0; } } } cout << (up == 0 ? "Yes" : "No") << endl; return 0; }