int len;
int f[15][15];
int a[15];
int ans=0;
int dfs(int pos,int lead,int limit,int sum,int d){
if(pos>len)return sum;
if(!limit&&f[pos][sum]!=-1)return f[pos][sum];
int res=0;
int up=limit?a[len-pos+1]:9;
for(int i=0;i<=up;i++){
if(lead&&i==0){
res+=dfs(pos+1,1,0,sum,d);
}
else{
if(i==d){
res+=dfs(pos+1,0,limit&&i==up,sum+1,d);
}else{
res+=dfs(pos+1,0,limit&&i==up,sum,d);
}
}
}
if(!limit&&!lead)f[pos][sum]=res;
return res;
}
void part(int x,int d){
len=0;ans=0;
memset(f,-1,sizeof f);
while(x){
a[++len]=x%10;x/=10;
}
ans=dfs(1,1,1,0,d);
}
void solve(){
int a,b;cin>>a>>b;
for(int i=0;i<10;i++){
int mx,mn;
part(a-1,i);mn=ans;
part(b,i);mx=ans;
cout<<(mx-mn)<<' ';
}
}