#include<bits/stdc++.h>
using namespace std;
int A,B;
int a[1009],cnt,dp[13][2][2][11];
void f(int x)
{
memset(dp,-1,sizeof(dp));
memset(a,0,sizeof(a));
cnt=0;
while(x>0)
{
++cnt;
a[cnt]=x%10;
x/=10;
}
return;
}
struct node
{
int d[11]={0,0,0,0,0,0,0,0,0,0,0};
};
node dfs(int k,bool limit,node w,bool b)
{
if(!k)return w;
if(~dp[k][limit][b][0])
{
node ans;
for(int i=0;i<10;i++)ans.d[i]=dp[k][limit][b][i];
return ans;
}
int r=9;
if(limit)r=a[k];
node sum;
for(int i=0;i<=r;++i)
{
if(i==a[k]&&limit)
{
bool cb=b;
if(i)cb=0;
node cc=w;
if(i||!b)cc.d[i]++;
node o=dfs(k-1,1,cc,cb);
for(int i=0;i<10;i++)sum.d[i]+=o.d[i];
}
else
{
bool cb=b;
if(i)cb=0;
node cc=w;
if(i||!b)cc.d[i]++;
node o=dfs(k-1,0,cc,cb);
for(int i=0;i<10;i++)sum.d[i]+=o.d[i];
}
}
for(int i=0;i<10;i++)dp[k][limit][b][i]=sum.d[i];
return sum;
}
int main()
{
scanf("%d%d",&A,&B);
node x;
f(A-1);
node p=dfs(cnt,1,x,1);
f(B);
node q=dfs(cnt,1,x,1);
for(int i=0;i<10;i++)cout<<q.d[i]-p.d[i]<<" ";
return 0;
}