#include<bits/stdc++.h>
#define clr(a,b) memset(a,b,sizeof(a))
#define ll long long
#define ull unsigned long long
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define repd(i,a,b) for(int i=a;i>=b;--i)
#define dbg(a,i,n) printf("%d %c",a," \n"[i==n])
using namespace std;
const int inf=0x3f3f3f3f;
const ll linf=(1ll<<62)-1;
const int N=3e5+7;
const int M=2e6+7;
const int mod=1e9+7;
template <typename T>inline void rd(T &x){
char c;int sign=1;x=0;
do{c=getchar();if(c=='-')sign=-1;}while(c<'0'||c>'9');
do{x=x*10+c-'0';c=getchar();}while(c>='0'&&c<='9');
x*=sign;
}
int t,f[30][30][10],num[100];
int dfs(int len,int sum,int lead,int limit){
if(!len) return sum;
if(f[len][sum][lead]!=-1 && !limit) return f[len][sum][lead] ;//
int up = limit? num[len]: 9, ans = 0;
rep(i,0,up)
ans += dfs(len-1, sum+(i==t && !(lead && !i)), lead && !i, limit && i==up);
return limit? ans: f[len][sum][lead] = ans;
}
int solve(int n){
clr(f,-1);
int k=0;
while(n){
num[++k] = n%10;
n/=10;
}
return dfs(k,0,1,1);
}
int main(){
int a,b;
while(~scanf("%d%d",&a,&b) && a+b){
if(a>b) swap(a,b);
rep(i,0,9) {
t = i;
printf("%d ",solve(b) - solve(a-1));
}
puts("");
}
return 0;
}