#include <bits/stdc++.h>
#define pb push_back
using namespace std;
typedef long long int ll;
map<vector<int>, ll> dp;
ll a[12], n;
bool is_cool(int arr[10]){
/*for(int j = 0; j < 10; j++)
cout << arr[j] << " ";
cout << endl;*/
int len = 0, x[10], tot = 0;
for(int j = 1; j < 10; j++)
while(arr[j]--){
x[len++] = j;
tot += j;
}
if(tot % 2 != 0) return 0;
int up = (1 << len);
for(int j = 0; j < up; j++){
int cur = 0;
for(int k = 0; k < len; k++)
if((1 << k)&j) cur += x[k];
if(cur == tot/2) return 1;
}
return 0;
}
ll foo(int pos, int arr[10], int tight){
//cout << pos << " " << tight << endl;
if(pos >= n){
int temp[10];
for(int j = 0; j < 10; j++)
temp[j] = arr[j];
int t = is_cool(temp);
//cout << t << endl;
return t+1;
}
vector<int> curr;
curr.pb(pos);
for(int j = 0; j < 10; j++)
curr.pb(arr[j]);
curr.pb(tight);
if(dp[curr]) return dp[curr];
ll ans = 1;
int last = (tight == 1)? a[pos] : 9, st = (pos == 0)? 1 : 0;
for(int j = st; j <= last; j++){
arr[j]++;
ll cur = foo(pos+1, arr, (tight && j == last)? 1 : 0);
arr[j]--;
ans += (cur - 1);
}
//cout << pos << " " << tight << endl;
dp[curr] = ans;
return ans;
}
int main(){
ll x, y;
cin >> x >> y;
while(x != 0 && y != 0){
x--;
ll ans1 = 0, ans2 = 0;
int arr[10] = {0};
if(x != 0){
dp.clear();
n = 0;
while(x){
a[n++] = x % 10;
x /= 10;
}
for(int j = 0; j < n/2; j++)
swap(a[j], a[n - j - 1]);
ans1 = foo(0, arr, 1);
ans1--;
int len = n;
for(int j = 1; j < len; j++){
n = j;
dp.clear();
memset(arr, 0, sizeof(arr));
ans1 += (foo(0, arr, 0) - 1);
}
//cout << ans1 << " ";
}
dp.clear();
memset(arr, 0, sizeof(arr));
n = 0;
while(y){
a[n++] = y % 10;
y /= 10;
}
for(int j = 0; j < n/2; j++)
swap(a[j], a[n - j - 1]);
ans2 = foo(0, arr, 1);
ans2 --;
int len = n;
for(int j = 1; j < len; j++){
n = j;
dp.clear();
memset(arr, 0, sizeof(arr));
ans2 += (foo(0, arr, 0) - 1);
}
//cout << ans2 << endl;
cout << (ans2 - ans1) << endl;
cin >> x >> y;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgcGIgcHVzaF9iYWNrCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBsb25nIGxvbmcgaW50IGxsOwoKbWFwPHZlY3RvcjxpbnQ+LCBsbD4gZHA7CgpsbCBhWzEyXSwgbjsKCmJvb2wgaXNfY29vbChpbnQgYXJyWzEwXSl7CiAgICAvKmZvcihpbnQgaiA9IDA7IGogPCAxMDsgaisrKQogICAgICAgIGNvdXQgPDwgYXJyW2pdIDw8ICIgIjsKICAgIGNvdXQgPDwgZW5kbDsqLwoKICAgIGludCBsZW4gPSAwLCB4WzEwXSwgdG90ID0gMDsKICAgIGZvcihpbnQgaiA9IDE7IGogPCAxMDsgaisrKQogICAgICAgIHdoaWxlKGFycltqXS0tKXsKICAgICAgICAgICAgeFtsZW4rK10gPSBqOwogICAgICAgICAgICB0b3QgKz0gajsKICAgICAgICB9CiAgICBpZih0b3QgJSAyICE9IDApIHJldHVybiAwOwoKICAgIGludCB1cCA9ICgxIDw8IGxlbik7CiAgICBmb3IoaW50IGogPSAwOyBqIDwgdXA7IGorKyl7CiAgICAgICAgaW50IGN1ciA9IDA7CiAgICAgICAgZm9yKGludCBrID0gMDsgayA8IGxlbjsgaysrKQogICAgICAgICAgICBpZigoMSA8PCBrKSZqKSBjdXIgKz0geFtrXTsKICAgICAgICBpZihjdXIgPT0gdG90LzIpIHJldHVybiAxOwogICAgfQogICAgcmV0dXJuIDA7Cn0KCmxsIGZvbyhpbnQgcG9zLCBpbnQgYXJyWzEwXSwgaW50IHRpZ2h0KXsKICAgIC8vY291dCA8PCBwb3MgPDwgIiAiIDw8IHRpZ2h0IDw8IGVuZGw7CiAgICBpZihwb3MgPj0gbil7CiAgICAgICAgaW50IHRlbXBbMTBdOwogICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCAxMDsgaisrKQogICAgICAgICAgICB0ZW1wW2pdID0gYXJyW2pdOwogICAgICAgIGludCB0ID0gaXNfY29vbCh0ZW1wKTsKICAgICAgICAvL2NvdXQgPDwgdCA8PCBlbmRsOwogICAgICAgIHJldHVybiB0KzE7CiAgICB9CgogICAgdmVjdG9yPGludD4gY3VycjsKICAgIGN1cnIucGIocG9zKTsKICAgIGZvcihpbnQgaiA9IDA7IGogPCAxMDsgaisrKQogICAgICAgIGN1cnIucGIoYXJyW2pdKTsKICAgIGN1cnIucGIodGlnaHQpOwoKICAgIGlmKGRwW2N1cnJdKSByZXR1cm4gZHBbY3Vycl07CgogICAgbGwgYW5zID0gMTsKICAgIGludCBsYXN0ID0gKHRpZ2h0ID09IDEpPyBhW3Bvc10gOiA5LCBzdCA9IChwb3MgPT0gMCk/IDEgOiAwOwogICAgZm9yKGludCBqID0gc3Q7IGogPD0gbGFzdDsgaisrKXsKICAgICAgICBhcnJbal0rKzsKICAgICAgICBsbCBjdXIgPSBmb28ocG9zKzEsIGFyciwgKHRpZ2h0ICYmIGogPT0gbGFzdCk/IDEgOiAwKTsKICAgICAgICBhcnJbal0tLTsKICAgICAgICBhbnMgKz0gKGN1ciAtIDEpOwogICAgfQogICAgLy9jb3V0IDw8IHBvcyA8PCAiICIgPDwgdGlnaHQgPDwgZW5kbDsKICAgIGRwW2N1cnJdID0gYW5zOwogICAgcmV0dXJuIGFuczsKfQoKaW50IG1haW4oKXsKICAgIGxsIHgsIHk7CiAgICBjaW4gPj4geCA+PiB5OwogICAgd2hpbGUoeCAhPSAwICYmIHkgIT0gMCl7CiAgICAgICAgeC0tOwogICAgICAgIGxsIGFuczEgPSAwLCBhbnMyID0gMDsKICAgICAgICBpbnQgYXJyWzEwXSA9IHswfTsKCiAgICAgICAgaWYoeCAhPSAwKXsKICAgICAgICAgICAgZHAuY2xlYXIoKTsKICAgICAgICAgICAgbiA9IDA7CiAgICAgICAgICAgIHdoaWxlKHgpewogICAgICAgICAgICAgICAgYVtuKytdID0geCAlIDEwOwogICAgICAgICAgICAgICAgeCAvPSAxMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgbi8yOyBqKyspCiAgICAgICAgICAgICAgICBzd2FwKGFbal0sIGFbbiAtIGogLSAxXSk7CiAgICAgICAgICAgIGFuczEgPSBmb28oMCwgYXJyLCAxKTsKICAgICAgICAgICAgYW5zMS0tOwogICAgICAgICAgICBpbnQgbGVuID0gbjsKICAgICAgICAgICAgZm9yKGludCBqID0gMTsgaiA8IGxlbjsgaisrKXsKICAgICAgICAgICAgICAgIG4gPSBqOwogICAgICAgICAgICAgICAgZHAuY2xlYXIoKTsKICAgICAgICAgICAgICAgIG1lbXNldChhcnIsIDAsIHNpemVvZihhcnIpKTsKICAgICAgICAgICAgICAgIGFuczEgKz0gKGZvbygwLCBhcnIsIDApIC0gMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9jb3V0IDw8IGFuczEgPDwgIiAiOwogICAgICAgIH0KICAgICAgICBkcC5jbGVhcigpOwogICAgICAgIG1lbXNldChhcnIsIDAsIHNpemVvZihhcnIpKTsKICAgICAgICBuID0gMDsKICAgICAgICB3aGlsZSh5KXsKICAgICAgICAgICAgYVtuKytdID0geSAlIDEwOwogICAgICAgICAgICB5IC89IDEwOwogICAgICAgIH0KICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgbi8yOyBqKyspCiAgICAgICAgICAgIHN3YXAoYVtqXSwgYVtuIC0gaiAtIDFdKTsKICAgICAgICBhbnMyID0gZm9vKDAsIGFyciwgMSk7CiAgICAgICAgYW5zMiAtLTsKICAgICAgICBpbnQgbGVuID0gbjsKICAgICAgICBmb3IoaW50IGogPSAxOyBqIDwgbGVuOyBqKyspewogICAgICAgICAgICBuID0gajsKICAgICAgICAgICAgZHAuY2xlYXIoKTsKICAgICAgICAgICAgbWVtc2V0KGFyciwgMCwgc2l6ZW9mKGFycikpOwogICAgICAgICAgICBhbnMyICs9IChmb28oMCwgYXJyLCAwKSAtIDEpOwogICAgICAgIH0KICAgICAgICAvL2NvdXQgPDwgYW5zMiA8PCBlbmRsOwoKICAgICAgICBjb3V0IDw8IChhbnMyIC0gYW5zMSkgPDwgZW5kbDsKCiAgICAgICAgY2luID4+IHggPj4geTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==