#include #include #include #include #include #include #include #include #include #include using namespace std; /* 1***2 1***3 1***4 ... 2***1 2***2 dp[sml][last] := cnt 12 dp[head][edge] */ //resize(vector, {v1,v2,v3}); void resize(int& val , vector::iterator itr){val = 0;} void resize(long long& val , vector::iterator itr){val = 0;} void resize(double& val , vector::iterator itr){val = 0;} template void resize(vector& vec, vector::iterator itr){ vec.resize(*itr); for(int i=0; i<*itr; i++){ resize(vec[i], itr+1); } } template void resize(T& vec, vector sz){ resize(vec, sz.begin()); } template ostream& operator << (ostream& os, vector vec){ for(int i=0; i>> dp(2, vector>(10,vector(11, 0))); dp[0][0][0] = 1; for(int i=0; i>> dp_(2, vector>(10,vector(11, 0))); for(int a=0; a<2; a++) for(int b=0; b<10; b++) for(int c=0; c<10; c++){ if(dp[a][b][c] == 0) continue; for(int d=0; d<10; d++){ if(a==0 && k> dp(4, vector(2, 0)); long long ret = 0; dp[0][1] = 1; for(int i=0; i> dp_(4, vector(2, 0)); for(int a=0; a<4; a++) for(int b=0; b<2; b++){ if(dp[a][b]==0) continue; for(int d=0; d<10; d++){ if(b==1 && d>k) break; int a_ = (a>0?a:min(d,3)); int b_ = b & (d==k); dp_[a_][b_] += dp[a][b]; if(i==x.size()-1){ //if(a_==1 && d==2 && b_==0){ // ret += dp[a][b]; //} if(a_==2 && d==1 && b_==0){ ret += dp[a][b]; } } } } swap(dp, dp_); } return ret; } int main(){ long long a,b; cin >> a >> b; a--; string a_,b_; char buff[100]; sprintf(buff,"%lld", a); a_ = buff; sprintf(buff,"%lld", b); b_ = buff; long long ans = 0; ans += calc(b_); ans += calc2(b_); ans -= calc(a_); a++; sprintf(buff,"%lld", a); a_ = buff; ans -= calc2(a_); if(a<=1 && b>=2) ans++; cout << ans << endl; return 0; }