#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);
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpsb25nIGxvbmcgdCwgbiwgbSwgYW5zLCBkcFsxN11bMl1bMl07CmJvb2wgeWU7CnN0cmluZyBzLCBsLCByOwpjaGFyIGFbMThdOwoKLy9zbHYoMCwgMCwgMCkgLT4gYmFueWFrIGJpbGFuZ2FuIGRpIGFudGFyYSBSIHlhbmcgY29uc2lzdCBtYXRjaGluZyBzdHJpbmcKbG9uZyBsb25nIHNsdihsb25nIGxvbmcgaWQsIGJvb2wga3VyYW5nUiwgYm9vbCBsZWJpaEwpCnsKCS8va3VyYW5nUiA9IDEgYm9sZWggbWlsaWggZGlnaXQgeWFuZyBsZWJpaCBnZWRlIGRhcmkgZGlnaXQgUiBzZWthcmFuZwoJLy9sZWJpaEwgPSAxIGJvbGVoIG1pbGloIGRpZ2l0IHlhbmcgbGViaWgga2VjaWwgZGFyaSBkaWdpdCBMIHNla2FyYW5nCgkvL2thbG8gZGkgaW50ZXJ2YWwgbWF0Y2hpbmcgc3RyaW5nIGhhcnVzIHBpbGloIGRpZ2l0IHlhbmcgc2VzdWFpCglpZiAoZHBbaWRdW2t1cmFuZ1JdW2xlYmloTF0gIT0gLTEpIHJldHVybiBkcFtpZF1ba3VyYW5nUl1bbGViaWhMXTsKCWlmIChpZCA9PSBtKSByZXR1cm4gMTsKCWxvbmcgbG9uZyBkOwoJZHBbaWRdW2t1cmFuZ1JdW2xlYmloTF0gPSAwOwoJZm9yIChkPTA7IGQ8PTk7IGQrKykKCXsKCQlpZiAoKCFsZWJpaEwgJiYgZDxsW2lkXS0nMCcpIHx8ICgha3VyYW5nUiAmJiBkPnJbaWRdLScwJykgfHwgKGFbaWRdICE9ICcjJyAmJiBhW2lkXS0nMCcgIT0gZCkpIGNvbnRpbnVlOyAvLyBnYSBib2xlaAoJCS8vIHByaW50ZigiaWQgPSAlbGxkIGQgPSAlbGxkXG4iLCBpZCwgZCk7CgkJZHBbaWRdW2t1cmFuZ1JdW2xlYmloTF0gKz0gc2x2KGlkKzEsIGt1cmFuZ1J8KGQ8cltpZF0tJzAnKSwgbGViaWhMfChkPmxbaWRdLScwJykpOwoJfQoJcmV0dXJuIGRwW2lkXVtrdXJhbmdSXVtsZWJpaExdOwp9CgppbnQgbWFpbigpCnsKCWxvbmcgbG9uZyBpLCBqLCBpaTsKCXNjYW5mKCIlbGxkIiwgJnQpOwoJd2hpbGUgKHQtLSkKCXsKCQljaW4gPj4gcyA+PiBsID4+IHI7CgkJbiA9IHMubGVuZ3RoKCk7CgkJbSA9IHIubGVuZ3RoKCk7CgkJcmV2ZXJzZShsLmJlZ2luKCksIGwuZW5kKCkpOwoJCXdoaWxlIChsLnNpemUoKTxtKSBsLnB1c2hfYmFjaygnMCcpOwoJCXJldmVyc2UobC5iZWdpbigpLCBsLmVuZCgpKTsKCQlhbnMgPSAwOwoJCWZvciAoaT0wOyBpPG0tbisxOyBpKyspCgkJewoJCQkvL2NlayBkaSBzdWJ0cmluZyBpIHNhbXBhaSBpK24tMQoJCQlpZiAoaSA9PSAwICYmIHNbMF0gPT0gJzAnKSBjb250aW51ZTsgLy8gZ2EgYm9sZWggYWRhIGxlYXppbmcgemVybyBuZ2FicwoJCQlmb3IgKGo9MDsgajxtOyBqKyspCgkJCXsKCQkJCWlmIChqPj1pICYmIGo8PWkrbi0xKQoJCQkJewoJCQkJCS8vc2VrYXJhbmcgcG9zaXNpIGtlIGotaSBkaSBzdHJpbmcgcwoJCQkJCWFbal0gPSBzW2otaV07CgkJCQl9IGVsc2UgCgkJCQl7CgkJCQkJYVtqXSA9ICcjJzsKCQkJCX0KCQkJfQoJCQkvLyBwcmludGYoImkgPSAlbGxkIGEgPSBcbiIsIGkpOwoJCQkvLyBmb3IgKGo9MDsgajxtOyBqKyspIHByaW50ZigiJWMiLCBhW2pdKTsKCQkJLy8gcHJpbnRmKCJcblxuIik7CgkJCW1lbXNldChkcCwgLTEsIHNpemVvZihkcCkpOwoJCQlhbnMgKz0gc2x2KDAsIDAsIDApOyAvL2tvbnRyaWJ1c2kgc3RyaW5nIHMgZGkgYW50YXJhIEwgZGFuIFIgZGkgc3Vic3RyaW5nIFtpLCBpK24tMV0KCQl9CgkJaWYgKHNbMF0gPT0gJzAnICYmIG4+MSkgYW5zID0gMDsgLy8gaGFydXNueWEgZ2luaQoJCXByaW50ZigiJWxsZFxuIiwgYW5zKTsKCX0KfQ==