枚举平衡点的位置
#include<cstdio>
#include<cstring>
typedef long long ll;
int dig[20];
ll d[20][20][2000];
ll dp(int po,int bal,int sum,bool zero,bool limit) {
if(po<0) return sum==0;
if(!limit&&!zero&&d[po][bal][sum]!=-1) return d[po][bal][sum];
int to=limit?dig[po]:9;
ll ans=0;
for(int i=0;i<=to;++i) {
if(zero&&i==0&&bal>=po) continue;
int nxtsum=sum+i*(po-bal);
if(nxtsum>=0) ans=ans+dp(po-1,bal,nxtsum,zero&&i==0,limit&&i==to);
}
if(!limit&&!zero) d[po][bal][sum]=ans;
return ans;
}
ll solve(ll x) {
if(x==-1) return 0;
int po=0;
while(x) {
dig[po++]=x%10;
x/=10;
}
ll ans=0;
for(int bal=0;bal<po;++bal) ans=ans+dp(po-1,bal,0,1,1);
return ans+1;
}
int main() {
memset(d,-1,sizeof(d));
int T;scanf("%d",&T);
while(T--) {
ll l,r;scanf("%lld%lld",&l,&r);
printf("%lld\n",solve(r)-solve(l-1));
}
return 0;
}