#include <bits/stdc++.h>
using namespace std;
long long t, n, m, ans, dp[17][2][2][2];
bool ye;
string s, l, r;
char a[18];
//slv(0, 0, 0, 0) -> banyak bilangan di antara R yang consist matching string
long long slv(long long id, bool kurangR, bool lebihL, bool aman)
{
//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
//gara-gara kasus S = 0 aku harus tambah state masih leading zero atau ngga (aman) asem
//Dan aku baru sadar, kenapa aku ga hitungnya dengan cara kontribusi(0, R)-kontribusi(0, L-1)
if (dp[id][kurangR][lebihL][aman] != -1) return dp[id][kurangR][lebihL][aman];
if (id == m) return 1;
long long d;
dp[id][kurangR][lebihL][aman] = 0;
for (d=0; d<=9; d++)
{
if ((!lebihL && d<l[id]-'0') || (!kurangR && d>r[id]-'0') || (a[id] != '#' && a[id]-'0' != d) || (!aman && a[id] == '0')) continue; // ga boleh
dp[id][kurangR][lebihL][aman] += slv(id+1, kurangR|(d<r[id]-'0'), lebihL|(d>l[id]-'0'), aman|(d>0));
}
return dp[id][kurangR][lebihL][aman];
}
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] = '#';
}
}
memset(dp, -1, sizeof(dp));
ans += slv(0, 0, 0, 0); //kontribusi string s di antara L dan R di substring [i, i+n-1]
}
printf("%lld\n", ans);
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpsb25nIGxvbmcgdCwgbiwgbSwgYW5zLCBkcFsxN11bMl1bMl1bMl07CmJvb2wgeWU7CnN0cmluZyBzLCBsLCByOwpjaGFyIGFbMThdOwoKLy9zbHYoMCwgMCwgMCwgMCkgLT4gYmFueWFrIGJpbGFuZ2FuIGRpIGFudGFyYSBSIHlhbmcgY29uc2lzdCBtYXRjaGluZyBzdHJpbmcKbG9uZyBsb25nIHNsdihsb25nIGxvbmcgaWQsIGJvb2wga3VyYW5nUiwgYm9vbCBsZWJpaEwsIGJvb2wgYW1hbikKewoJLy9rdXJhbmdSID0gMSBib2xlaCBtaWxpaCBkaWdpdCB5YW5nIGxlYmloIGdlZGUgZGFyaSBkaWdpdCBSIHNla2FyYW5nCgkvL2xlYmloTCA9IDEgYm9sZWggbWlsaWggZGlnaXQgeWFuZyBsZWJpaCBrZWNpbCBkYXJpIGRpZ2l0IEwgc2VrYXJhbmcKCS8va2FsbyBkaSBpbnRlcnZhbCBtYXRjaGluZyBzdHJpbmcgaGFydXMgcGlsaWggZGlnaXQgeWFuZyBzZXN1YWkKCS8vZ2FyYS1nYXJhIGthc3VzIFMgPSAwIGFrdSBoYXJ1cyB0YW1iYWggc3RhdGUgbWFzaWggbGVhZGluZyB6ZXJvIGF0YXUgbmdnYSAoYW1hbikgYXNlbQoJLy9EYW4gYWt1IGJhcnUgc2FkYXIsIGtlbmFwYSBha3UgZ2EgaGl0dW5nbnlhIGRlbmdhbiBjYXJhIGtvbnRyaWJ1c2koMCwgUikta29udHJpYnVzaSgwLCBMLTEpCglpZiAoZHBbaWRdW2t1cmFuZ1JdW2xlYmloTF1bYW1hbl0gIT0gLTEpIHJldHVybiBkcFtpZF1ba3VyYW5nUl1bbGViaWhMXVthbWFuXTsKCWlmIChpZCA9PSBtKSByZXR1cm4gMTsKCWxvbmcgbG9uZyBkOwoJZHBbaWRdW2t1cmFuZ1JdW2xlYmloTF1bYW1hbl0gPSAwOwoJZm9yIChkPTA7IGQ8PTk7IGQrKykKCXsKCQlpZiAoKCFsZWJpaEwgJiYgZDxsW2lkXS0nMCcpIHx8ICgha3VyYW5nUiAmJiBkPnJbaWRdLScwJykgfHwgKGFbaWRdICE9ICcjJyAmJiBhW2lkXS0nMCcgIT0gZCkgfHwgKCFhbWFuICYmIGFbaWRdID09ICcwJykpIGNvbnRpbnVlOyAvLyBnYSBib2xlaAoJCWRwW2lkXVtrdXJhbmdSXVtsZWJpaExdW2FtYW5dICs9IHNsdihpZCsxLCBrdXJhbmdSfChkPHJbaWRdLScwJyksIGxlYmloTHwoZD5sW2lkXS0nMCcpLCBhbWFufChkPjApKTsKCX0KCXJldHVybiBkcFtpZF1ba3VyYW5nUl1bbGViaWhMXVthbWFuXTsKfQoKaW50IG1haW4oKQp7Cglsb25nIGxvbmcgaSwgaiwgaWk7CglzY2FuZigiJWxsZCIsICZ0KTsKCXdoaWxlICh0LS0pCgl7CgkJY2luID4+IHMgPj4gbCA+PiByOwoJCW4gPSBzLmxlbmd0aCgpOwoJCW0gPSByLmxlbmd0aCgpOwoJCXJldmVyc2UobC5iZWdpbigpLCBsLmVuZCgpKTsKCQl3aGlsZSAobC5zaXplKCk8bSkgbC5wdXNoX2JhY2soJzAnKTsKCQlyZXZlcnNlKGwuYmVnaW4oKSwgbC5lbmQoKSk7CgkJYW5zID0gMDsKCQlmb3IgKGk9MDsgaTxtLW4rMTsgaSsrKQoJCXsKCQkJLy9jZWsgZGkgc3VidHJpbmcgaSBzYW1wYWkgaStuLTEKCQkJaWYgKGkgPT0gMCAmJiBzWzBdID09ICcwJykgY29udGludWU7IC8vIGdhIGJvbGVoIGFkYSBsZWF6aW5nIHplcm8gbmdhYnMKCQkJZm9yIChqPTA7IGo8bTsgaisrKQoJCQl7CgkJCQlpZiAoaj49aSAmJiBqPD1pK24tMSkKCQkJCXsKCQkJCQkvL3Nla2FyYW5nIHBvc2lzaSBrZSBqLWkgZGkgc3RyaW5nIHMKCQkJCQlhW2pdID0gc1tqLWldOwoJCQkJfSBlbHNlIAoJCQkJewoJCQkJCWFbal0gPSAnIyc7CgkJCQl9CgkJCX0KCQkJbWVtc2V0KGRwLCAtMSwgc2l6ZW9mKGRwKSk7CgkJCWFucyArPSBzbHYoMCwgMCwgMCwgMCk7IC8va29udHJpYnVzaSBzdHJpbmcgcyBkaSBhbnRhcmEgTCBkYW4gUiBkaSBzdWJzdHJpbmcgW2ksIGkrbi0xXQoJCX0KCQlwcmludGYoIiVsbGRcbiIsIGFucyk7Cgl9Cn0=