ll dfs(int pos,int pivot,int pre,bool limit) { if (pos==-1) { if (pre!=2000) return 0; else return 1; } if (!limit&&dp[pos][pivot][pre]!=-1) return dp[pos][pivot][pre]; int up = limit?a[pos]:9; ll ans = 0; for (int i = 0 ; i <= up ; i ++) { ans += dfs(pos-1,pivot,pre+(pos-pivot)*i,limit&&i==a[pos]); } if (!limit) dp[pos][pivot][pre] = ans; return ans; }
ll solve(ll x) { pos = 0; while (x) { a[pos++] = x%10; x /= 10; } ll ans = 0; for (int i = 0 ; i < pos ; i ++) { ans += dfs(pos-1,i,2000,true); //printf("now ans = %lld \n",ans); } return ans-pos+1; }
int main(){
int T; scanf("%d",&T); memset(dp,-1,sizeof(dp)); while (T--) { scanf("%I64d%I64d",&l,&r); printf("%I64d\n",solve(r)-solve(l-1)); } return 0; }