Link to this code: https://cses.fi/paste/b245238f42728c9e65f592/
#include<bits/stdc++.h>
using namespace std;
using ll=long long int;
ll dp[20][10][2][2];
ll digitDP(vector<int>&num,int index,int prev,bool zeros,bool tight){
 if(index==-1)return 1;
   if(dp[index][prev][zeros][tight]!=-1)return dp[index][prev][zeros][tight];
 int right=tight?num[index]:9;
 ll ans=0;
 for(int i=0;i<=right;i++){
  if(!zeros and prev==i)continue;
   ans+=digitDP(num,index-1,i,zeros and i==0,tight and i==num[index]);
 } 
 return dp[index][prev][zeros][tight]=ans; 
}
void digits(vector<int>&num,ll n){
  num.clear();
  while(n){
    num.push_back(n%10);
    n/=10;
  }
}
int main() {
    ll sola,solb,a,b;
    memset(dp,-1,sizeof dp);
    vector<int>num;
    cin>>a>>b;
    digits(num,a-1);
    sola=digitDP(num,num.size()-1,0,1,1);
    memset(dp,-1,sizeof dp);
    digits(num,b);
    solb=digitDP(num,num.size()-1,0,1,1);
    printf("%lld",solb-sola);
}