#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define initial first
#define added second
#define sort_all(v) sort(v.begin(), v.end())
#define ya_sayed_ya_badawy \
ios_base::sync_with_stdio(false); \
cin.tie(NULL);
const int MAX = 50 + 5;
int MOD = 1000000007;
const int OO = 1e9;
const double EPS = (double)1e-9;
const int MAX_N = 500;
ll K;
string a, b;
ll zebra[35];
int mem[MAX][2][2][2][MAX_N];
int visited[MAX][2][2][2][MAX_N];
const int offset = 17;
int id = 1;
int add(ll a, ll b)
{
return (a + b) % MOD;
}
int mul(ll a, ll b)
{
return (a * b) % MOD;
}
ll fp(ll base, ll pow)
{
if (pow == 0)
{
return 1;
}
ll res = fp(base, pow / 2);
if (pow % 2 == 0)
{
return res * res;
}
return base * res * res;
}
bool check(ll number)
{
int cost = 0;
for (int i = 31; i >= 0; i--)
{
cost += number / zebra[i];// 3
number = number - (number / zebra[i]) * zebra[i];
}
return (cost == K);
}
int dp(int pos, bool exceeded_lower, bool below_upper, int started, ll number)
{
if (pos == (int)b.size())
{
return check(number);
}
int &ret = mem[pos][exceeded_lower][below_upper][started][number];
if (visited[pos][exceeded_lower][below_upper][started][number] == id)
{
return ret;
}
visited[pos][exceeded_lower][below_upper][started][number] = id;
ret = 0;
int low = exceeded_lower ? 0 : (a[pos] - '0');
int high = below_upper ? 9 : (b[pos] - '0');
for (int d = low; d <= high; ++d)
{
bool new_tight_low = exceeded_lower || (d > (a[pos] - '0'));
bool new_tight_high = below_upper || (d < (b[pos] - '0'));
bool new_started = started || (d != 0);
int new_number = number * 10 + d;
ret = add(ret, dp(pos + 1, new_tight_low, new_tight_high, new_started, new_number));
}
return ret;
}
string normalize_length(string s, int len)
{
return (string(len - (int)s.size(), '0') + s);
}
void solve(int t)
{
cin >> a >> b >> K;
int max_len = max(a.size(), b.size());
a = normalize_length(a, max_len);
b = normalize_length(b, max_len);
zebra[0] = 1;
ll res = 1;
int j = 1;
for (int i = 2; i < 64; i += 2)
{
res += fp(2, i);
zebra[j] = res;
// cout << zebra[j] << " ";
// cout << "j: " << j << endl;
j++;
}
cout << dp(0, 0, 0, 0, 0);
id++;
}
signed main()
{
ya_sayed_ya_badawy int t = 1;
cin >> t;
for (int i = 1; i <= t; i++)
{
solve(i);
if (i != t)
{
cout << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSB1bGwgdW5zaWduZWQgbG9uZyBsb25nCiNkZWZpbmUgaW5pdGlhbCBmaXJzdAojZGVmaW5lIGFkZGVkIHNlY29uZAojZGVmaW5lIHNvcnRfYWxsKHYpIHNvcnQodi5iZWdpbigpLCB2LmVuZCgpKQoKI2RlZmluZSB5YV9zYXllZF95YV9iYWRhd3kgICAgICAgICAgICBcCiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgXAogICAgY2luLnRpZShOVUxMKTsKCmNvbnN0IGludCBNQVggPSA1MCArIDU7CmludCBNT0QgPSAxMDAwMDAwMDA3Owpjb25zdCBpbnQgT08gPSAxZTk7CmNvbnN0IGRvdWJsZSBFUFMgPSAoZG91YmxlKTFlLTk7Cgpjb25zdCBpbnQgTUFYX04gPSA1MDA7CgpsbCBLOwpzdHJpbmcgYSwgYjsKCmxsIHplYnJhWzM1XTsKCmludCBtZW1bTUFYXVsyXVsyXVsyXVtNQVhfTl07CmludCB2aXNpdGVkW01BWF1bMl1bMl1bMl1bTUFYX05dOwoKY29uc3QgaW50IG9mZnNldCA9IDE3OwoKaW50IGlkID0gMTsKCmludCBhZGQobGwgYSwgbGwgYikKewogICAgcmV0dXJuIChhICsgYikgJSBNT0Q7Cn0KCmludCBtdWwobGwgYSwgbGwgYikKewogICAgcmV0dXJuIChhICogYikgJSBNT0Q7Cn0KCmxsIGZwKGxsIGJhc2UsIGxsIHBvdykKewogICAgaWYgKHBvdyA9PSAwKQogICAgewogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIGxsIHJlcyA9IGZwKGJhc2UsIHBvdyAvIDIpOwoKICAgIGlmIChwb3cgJSAyID09IDApCiAgICB7CiAgICAgICAgcmV0dXJuIHJlcyAqIHJlczsKICAgIH0KICAgIHJldHVybiBiYXNlICogcmVzICogcmVzOwp9Cgpib29sIGNoZWNrKGxsIG51bWJlcikKewogICAgCiAgICBpbnQgY29zdCA9IDA7CgogICAgZm9yIChpbnQgaSA9IDMxOyBpID49IDA7IGktLSkKICAgIHsKICAgICAgICBjb3N0ICs9IG51bWJlciAvIHplYnJhW2ldOy8vIDMgCiAgICAgICAgbnVtYmVyID0gbnVtYmVyIC0gKG51bWJlciAvIHplYnJhW2ldKSAqIHplYnJhW2ldOwogICAgfQogICAgCiAgICByZXR1cm4gKGNvc3QgPT0gSyk7Cn0KCmludCBkcChpbnQgcG9zLCBib29sIGV4Y2VlZGVkX2xvd2VyLCBib29sIGJlbG93X3VwcGVyLCBpbnQgc3RhcnRlZCwgbGwgbnVtYmVyKQp7CgogICAgaWYgKHBvcyA9PSAoaW50KWIuc2l6ZSgpKQogICAgewogICAgICAgIHJldHVybiBjaGVjayhudW1iZXIpOwogICAgfQoKICAgIGludCAmcmV0ID0gbWVtW3Bvc11bZXhjZWVkZWRfbG93ZXJdW2JlbG93X3VwcGVyXVtzdGFydGVkXVtudW1iZXJdOwogICAgaWYgKHZpc2l0ZWRbcG9zXVtleGNlZWRlZF9sb3dlcl1bYmVsb3dfdXBwZXJdW3N0YXJ0ZWRdW251bWJlcl0gPT0gaWQpCiAgICB7CiAgICAgICAgcmV0dXJuIHJldDsKICAgIH0KCiAgICB2aXNpdGVkW3Bvc11bZXhjZWVkZWRfbG93ZXJdW2JlbG93X3VwcGVyXVtzdGFydGVkXVtudW1iZXJdID0gaWQ7CgogICAgcmV0ID0gMDsKICAgIGludCBsb3cgPSBleGNlZWRlZF9sb3dlciA/IDAgOiAoYVtwb3NdIC0gJzAnKTsKICAgIGludCBoaWdoID0gYmVsb3dfdXBwZXIgPyA5IDogKGJbcG9zXSAtICcwJyk7CgogICAgZm9yIChpbnQgZCA9IGxvdzsgZCA8PSBoaWdoOyArK2QpCiAgICB7CiAgICAgICAgYm9vbCBuZXdfdGlnaHRfbG93ID0gZXhjZWVkZWRfbG93ZXIgfHwgKGQgPiAoYVtwb3NdIC0gJzAnKSk7CiAgICAgICAgYm9vbCBuZXdfdGlnaHRfaGlnaCA9IGJlbG93X3VwcGVyIHx8IChkIDwgKGJbcG9zXSAtICcwJykpOwogICAgICAgIGJvb2wgbmV3X3N0YXJ0ZWQgPSBzdGFydGVkIHx8IChkICE9IDApOwoKICAgICAgICBpbnQgbmV3X251bWJlciA9IG51bWJlciAqIDEwICsgZDsKCiAgICAgICAgcmV0ID0gYWRkKHJldCwgZHAocG9zICsgMSwgbmV3X3RpZ2h0X2xvdywgbmV3X3RpZ2h0X2hpZ2gsIG5ld19zdGFydGVkLCBuZXdfbnVtYmVyKSk7CiAgICB9CgogICAgcmV0dXJuIHJldDsKfQoKc3RyaW5nIG5vcm1hbGl6ZV9sZW5ndGgoc3RyaW5nIHMsIGludCBsZW4pCnsKICAgIHJldHVybiAoc3RyaW5nKGxlbiAtIChpbnQpcy5zaXplKCksICcwJykgKyBzKTsKfQoKdm9pZCBzb2x2ZShpbnQgdCkKewoKICAgIGNpbiA+PiBhID4+IGIgPj4gSzsKICAgIAogICAgaW50IG1heF9sZW4gPSBtYXgoYS5zaXplKCksIGIuc2l6ZSgpKTsKICAgIGEgPSBub3JtYWxpemVfbGVuZ3RoKGEsIG1heF9sZW4pOwogICAgYiA9IG5vcm1hbGl6ZV9sZW5ndGgoYiwgbWF4X2xlbik7CgogICAgemVicmFbMF0gPSAxOwoKICAgIGxsIHJlcyA9IDE7CiAgICBpbnQgaiA9IDE7CgogICAgZm9yIChpbnQgaSA9IDI7IGkgPCA2NDsgaSArPSAyKQogICAgewoKICAgICAgICByZXMgKz0gZnAoMiwgaSk7CgogICAgICAgIHplYnJhW2pdID0gcmVzOwoKICAgICAgICAvLyBjb3V0IDw8IHplYnJhW2pdIDw8ICIgIjsKICAgICAgICAvLyBjb3V0IDw8ICJqOiAiIDw8IGogPDwgZW5kbDsKICAgICAgICBqKys7CiAgICB9CgogICAgY291dCA8PCBkcCgwLCAwLCAwLCAwLCAwKTsKCiAgICBpZCsrOwoKfQoKc2lnbmVkIG1haW4oKQp7CiAgICB5YV9zYXllZF95YV9iYWRhd3kgaW50IHQgPSAxOwogICAgY2luID4+IHQ7CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gdDsgaSsrKQogICAgewogICAgICAgIHNvbHZlKGkpOwogICAgICAgIGlmIChpICE9IHQpCiAgICAgICAgewogICAgICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAwOwp9