https://www.luogu.com.cn/problem/SP10606
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
ll n,m;
int dp[22][1<<10][1<<10];
int a[22];
int check(int sta,int f)
{
for(int i=0;i<=9;i++)
{
if(f&(1<<i) && ((sta&(1<<i))&(i%2))) return 0;
}
return 1;
}
int dfs(int len,int mask,int lim,int f,int pre)
{
if(len==0)
{
return check(mask,f);
}
if(dp[len][mask][f]!=-1) return dp[len][mask][f];
int ret=0;
for(int i=0;i<=(lim?a[len]:9);i++)
{
if(!i && pre) ret+=dfs(len-1,mask,lim,f,pre);
else
{
ret+=dfs(len-1,mask^(1<<i),lim&(i==a[len]),f|(1<<i),0);
}
}
if(!pre && !lim)dp[len][mask][f]=ret;
return ret;
}
int solve(int n)
{
int tot=0;
while(n>0)
{
a[++tot]=n%10;
n/=10;
}
return dfs(tot,0,1,0,1);
}
int main()
{
cin>>n>>m;
memset(dp,-1,sizeof dp);
int a=solve(m);
memset(dp,-1,sizeof dp);
cout<<a-solve(n-1);
}