#include <bits/stdc++.h>
using namespace std;

long long t, n, m, ans, dp[17][2][2];
bool ye;
string s, l, r;
char a[18];

//slv(0, 0, 0) -> banyak bilangan di antara R yang consist matching string
long long slv(long long id, bool kurangR, bool lebihL)
{
	//kurangR = 1 boleh milih digit yang lebih gede dari digit R sekarang
	//lebihL = 1 boleh milih digit yang lebih kecil dari digit L sekarang
	//kalo di interval matching string harus pilih digit yang sesuai
	if (dp[id][kurangR][lebihL] != -1) return dp[id][kurangR][lebihL];
	if (id == m) return 1;
	long long d;
	dp[id][kurangR][lebihL] = 0;
	for (d=0; d<=9; d++)
	{
		if ((!lebihL && d<l[id]-'0') || (!kurangR && d>r[id]-'0') || (a[id] != '#' && a[id]-'0' != d)) continue; // ga boleh
		// printf("id = %lld d = %lld\n", id, d);
		dp[id][kurangR][lebihL] += slv(id+1, kurangR|(d<r[id]-'0'), lebihL|(d>l[id]-'0'));
	}
	return dp[id][kurangR][lebihL];
}

int main()
{
	long long i, j, ii;
	scanf("%lld", &t);
	while (t--)
	{
		cin >> s >> l >> r;
		n = s.length();
		m = r.length();
		reverse(l.begin(), l.end());
		while (l.size()<m) l.push_back('0');
		reverse(l.begin(), l.end());
		ans = 0;
		for (i=0; i<m-n+1; i++)
		{
			//cek di subtring i sampai i+n-1
			if (i == 0 && s[0] == '0') continue; // ga boleh ada leazing zero ngabs
			for (j=0; j<m; j++)
			{
				if (j>=i && j<=i+n-1)
				{
					//sekarang posisi ke j-i di string s
					a[j] = s[j-i];
				} else 
				{
					a[j] = '#';
				}
			}
			// printf("i = %lld a = \n", i);
			// for (j=0; j<m; j++) printf("%c", a[j]);
			// printf("\n\n");
			memset(dp, -1, sizeof(dp));
			ans += slv(0, 0, 0); //kontribusi string s di antara L dan R di substring [i, i+n-1]
		}
		if (s[0] == '0' && n>1) ans = 0; // harusnya gini
		printf("%lld\n", ans);
	}
}