using ll = long long; class Solution { public: ll dp[20][2][2][11][11]; string s1, s2; string s; int n; ll digit(ll i, bool f, bool started, int prev1, int prev2) { if (i == n) return 0; ll& ret = dp[i][f][started][prev1 + 1][prev2 + 1]; if (ret != -1) return ret; ll res = 0; ll R = f ? 9 : (s[i] - '0'); for (int dgt = 0; dgt <= R; dgt++) { bool nf = f || (dgt < (s[i] - '0')); bool nstar = started || (dgt != 0); int add = 0; int np1, np2; if (!nstar) { np1 = -1, np2 = -1; } else if (!started && nstar) { np1 = -1; np2 = dgt; } else { np1 = prev2; np2 = dgt; if (prev1 != -1 && prev2 != -1 && nstar) { if ((prev1 < prev2 && prev2 > dgt) || (prev1 > prev2 && prev2 < dgt)) add = 1; } } res += add + digit(i + 1, nf, nstar, np1, np2); } return ret = res; } ll calc(ll x) { if (x <= 0) return 0; s = to_string(x); n = s.size(); memset(dp, -1, sizeof(dp)); return digit(0, 0, 0, -1, -1); } long long totalWaviness(long long num1, long long num2) { return calc(num2) - calc(num1 - 1); } };