#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
using namespace std;

typedef unsigned long long ull;

ull a, b;
ull cur[2][2][1 << 10][1 << 10];
ull old[2][2][1 << 10][1 << 10];
//    follow num? , count zero? , has digit, parity digit

inline ull solve(ull x)
{
	vector<int> dig; dig.clear();
	if (x == 0) return 1;

	while (x)
	{
		dig.push_back(x % 10LL);
		x /= 10LL;
	}
	reverse(dig.begin(), dig.end());
	int len = dig.size();

	//printf("len = %d\n", len);

	memset(old, 0, sizeof(old));
	old[0][1][0][0] = 1LL;
	int to, nCntZero, nMaskHas, nMaskPar, ok;
	for (int size=0; size < len; ++size)
	{
		memset(cur, 0, sizeof(cur));
		for (int maskHas=0; maskHas < (1 << 10); ++maskHas)
			for (int maskPar=maskHas; ; maskPar = (maskPar-1)&maskHas)
			{
				//printf("%d ", maskPar);

				for (int cntZero=0; cntZero < 2; ++cntZero)
					for (int follow=0; follow < 2; ++follow)
					{
						if (!old[cntZero][follow][maskHas][maskPar])
							continue;
						int to = follow? dig[size] : 9;

						//printf("currently with %d %d %d %d -> %llu\n", cntZero, follow, maskHas, maskPar, old[cntZero][follow][maskHas][maskPar]);

						for (int next=0; next <= to; ++next)
						{
							nCntZero  = cntZero | (next > 0);
							nMaskHas = maskHas | (1 << next);
							nMaskPar = maskPar ^ (1 << next);
							if (!nCntZero)
								nMaskHas = maskHas,
								nMaskPar = maskPar;
							//printf("new -> %d %d \n", nMaskHas, nMaskPar);
							cur[nCntZero][follow & (next == to)][nMaskHas][nMaskPar] +=
								old[cntZero][follow][maskHas][maskPar];
						}
					}
				if (!maskPar)
					break;
			}

		/*for (int fol=0; fol < 2; ++fol)
			for (int mHas=0; mHas < (1 << 10); ++mHas)
				for (int mPar=0; mPar < (1 << 10); ++mPar)
					printf("%d %d %d : %llu\n", fol, mHas, mPar, cur[fol][mHas][mPar]);*/
		//printf("I'm over with these %d\n", size);
		if (size+1 != len)
			memcpy(old, cur, sizeof(cur));
	}

	ull ans = 0LL;
	for (int maskHas=0; maskHas < (1 << 10); ++maskHas)
		for (int maskPar=maskHas; ; maskPar = maskHas&(maskPar-1))
		{
			//printf("%d\n", maskPar);

			if (!cur[1][0][maskHas][maskPar])
			{
				if (!maskPar) break;
				continue;
			}
			ok = 1;
			for (int d=0; d < 10; ++d)
				if (maskHas & (1 << d))
					if ((d + ((maskPar & (1 << d)) > 0)) % 2 == 0)
					{
						ok = 0;
						break;
					}

			if (ok)
			{
				ans += cur[1][0][maskHas][maskPar];
				//printf("aaand ans += %llu from %d %d %d %d\n", cur[1][0][maskHas][maskPar], 1, 0, maskHas, maskPar);
			}
			if (!maskPar)
				break;
		}

	return ans;
}

inline void read()
{
	scanf("%llu%llu", &a, &b);
}

int main()
{
	read();
	printf("%llu\n", solve(b+1) - solve(a));
	return 0;
}
