#include<cstdio>#include<cstring>#include<algorithm>usingnamespace std;constdouble eps =1e-8;constint maxn =12;int a[maxn], dp[maxn][maxn];int Pow[maxn];//Pow[i]代表10的i次方//pos为当前到达的下标,pre为上一个数字,num为需要统计的数字//lead判断前导是否有0,lim判断前面是否已到上限intdfs(int pos,int pre,int num,bool lead,bool lim){if(pos ==-1){if(!lead || num)return pre==num ?1:0;elsereturn0;}if(!lim &&!lead &&~dp[pos][pre])return dp[pos][pre];int up = lim ? a[pos]:9;int ans =0;for(int i =0; i <= up;++i){if(pre == num){if(!lead || num){if(i==up && lim){//到达上限,后面的取值不能大于原来该位的值int t =0;for(int j = pos-1; j >=0;--j)
t = t *10+ a[j];
ans += t +1;}//未到上限,后面的取值均可取0-9,所以是10的pos次方else ans += Pow[pos];}
ans +=dfs(pos-1, i, num, lead&&i==0, lim&&i==a[pos]);}else ans +=dfs(pos-1, i, num, lead&&i==0, lim&&i==a[pos]);}if(!lim &&!lead) dp[pos][pre]= ans;return ans;}intsolve(int x,int num){int i =0;memset(dp,-1,sizeof(dp));while(x){
a[i++]= x %10;
x /=10;}returndfs(i-1,10, num, num==0,true);}intmain(){int l, r;
Pow[0]=1;for(int i =1; i <=9;++i)
Pow[i]= Pow[i-1]*10;while(~scanf("%d%d",&l,&r)&&(l||r)){memset(dp,-1,sizeof(dp));if(l > r)swap(l, r);//注意l可能大于rprintf("%d",solve(r,0)-solve(l-1,0));for(int i =1; i <10;++i)printf(" %d",solve(r, i)-solve(l-1, i));putchar('\n');}return0;}